HarmonyOS開發(fā)之LocalStorage

LocalStorage是頁面級的UI狀態(tài)存儲,頁面組件(組件樹根節(jié)點(diǎn))獲取LocalStorage是通過@Entry裝飾器接收的參數(shù)傳入,子組件自動獲取LocalStorage的訪問權(quán)限,獲取的也是通過@Entry傳入的LocalStorage。頁面內(nèi)共享同一個(gè)LocalStorage實(shí)例。支持一個(gè)UIAbility內(nèi)多個(gè)頁面間共享一個(gè)LocalStorage。getShared僅能獲取當(dāng)前Stage通過UIAbility中windonStage.loadcontent傳入的LocalStorage

不與自定義組件進(jìn)行關(guān)聯(lián)的使用場景:

LocalStorage若是想要跟自定義組件建立聯(lián)系,需要使用裝飾器:@LocalStorageProp和@LocalStorageLink

一、@LocalStorageProp:此裝飾器裝飾的變量與LocalStorage中key對應(yīng)的屬性建立單向同步關(guān)系

示例:@LocalStorageProp(key) name:string = ‘’;

裝飾的變量需要初始化,因?yàn)榇薻ey(常量字符串)可能沒值。另外不能通過父組件傳值賦值,只能通過LocalStorage中的key初始化,若沒有對應(yīng)key,用默認(rèn)值初始化,并將值存入LocalStorage中,注意:此時(shí)是存入,不是同步。

支持初始化子節(jié)點(diǎn),可用于初始化子節(jié)點(diǎn)的@State 、@Prop、@Link、@Provide狀態(tài)變量

只能在組件內(nèi)訪問,不支持在組件外部訪問

同步類型:數(shù)據(jù)單向同步。

框架行為:

1、被@LocalStorageProp裝飾的變量值改變時(shí),不會同步會回LocalStorage中,但會驅(qū)動對應(yīng)的UI組件刷新渲染.

2、若是LocalStorage(key)的值發(fā)生改變,那么所有@LocalStorageProp(key)裝飾的變量都會發(fā)生改變,并且覆蓋其本地的改變。

示例1:

示例1

示例1中:

1、點(diǎn)擊name1,name1值改為‘value change’,驅(qū)動name1顯示內(nèi)容改變,不會同步給LocalStorage,所以name2顯示內(nèi)容不變。

2、點(diǎn)擊name2,會改變LocalStorage中name對應(yīng)的值,單向同步給name1。改為'keke'

二、@LocalStorageLink:此裝飾器裝飾的變量與LocalStorage中key對應(yīng)的屬性建立雙向同步關(guān)系

示例:@LocalStorageLink(key)? age:number:= 11;

裝飾的變量需要初始化,因?yàn)榇薻ey可能沒值。同樣不能通過父組件傳值賦值,只能通過LocalStorage中的key初始化。若沒有對應(yīng)的key,用默認(rèn)值初始化,并存入LocalStorage中。

支持初始化子節(jié)點(diǎn),可用于初始化子節(jié)點(diǎn)的@State、@Prop、@Link、@Provide狀態(tài)變量

同樣只能在組件內(nèi)訪問,不支持在組件外部訪問

@LocalStorageLink(key)和LocalStorage中key對應(yīng)的值會建立數(shù)據(jù)雙向同步。

本地變量age改變,會把值同步回LocalStorage中key對應(yīng)的值,同樣LocalStorage中key對應(yīng)的值改變,也會把值同步到本地變量age。即:把a(bǔ)ge的新值同步回LocalStorage中key對應(yīng)的值,同樣LocalStorage中key對應(yīng)的值發(fā)生改變,本地變量age的值也發(fā)生同步改變。

同步類型:雙向同步。

框架行為:

當(dāng)@LocalStorageLink(key)裝飾的的變量發(fā)生改變時(shí),會把修改的結(jié)果值同步回LocalStorage中key對應(yīng)的屬性值。

當(dāng)LocalStorage中的key對應(yīng)的屬性值發(fā)生改變時(shí),會把改變的結(jié)果值同步到所有key綁定的數(shù)據(jù)上面(包括LocalStorageLink(key)和LocalStorageProp裝飾的變量。

當(dāng)@LocalStorageLink(key)裝飾的變量發(fā)生該改變時(shí),在同步數(shù)據(jù)回LocalStorage中的同時(shí),還會驅(qū)動與其綁定的UI組件進(jìn)行刷新渲染

示例2:

示例2中:

1、點(diǎn)擊name1,name1值改為‘value change’,驅(qū)動name1顯示內(nèi)容改變,同時(shí)會同步給LocalStorage,所以name2顯示內(nèi)容對應(yīng)的不是狀態(tài)變量,所以顯示內(nèi)容不會改變,但LocalStorage的值改變會同步給所有綁定了對應(yīng)key的數(shù)據(jù),所以name3也會改變,并驅(qū)動name3的UI刷新渲染。

2、點(diǎn)擊name2,會改變LocalStorage中name對應(yīng)的值,會同步給name1和name3。均改為'keke',同時(shí)驅(qū)動name1和name3組件UI重新渲染

示例代碼3:若LocaStorage中沒有對應(yīng)的key,用默認(rèn)值初始化,并將值存入LocalStorage中,下次通過key取的值是LocalStorage中的值,而不是新的默認(rèn)值

下面示例3是針對初始值而言:

示例 3

示例3中,因?yàn)橐婚_始LocalStorage中沒有name鍵,?value1在使用默認(rèn)值123初始化的時(shí)候,也把值存到了存到LocalStorage中name對應(yīng)的屬性值上面,所以當(dāng)value2是優(yōu)先用LocalStorage中name對應(yīng)的值來初始化的,所以還是123。用@LocalStorageLink('name')同樣如此。


Ability內(nèi)多個(gè)頁面共享的示例如下:

1、在當(dāng)前Ability中的windowStage.loadConent傳入LocalStorage

來源

2、在組件入口處通過getShare獲取,并通過@Entry傳入

取值
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容