在实际鸿蒙开发中,如果使用的AppStorage来存数据,比如一个记事本应用,用户可以在不同的页面或组件里添加、修改记事内容,而这些内容都是存储在AppStorage里的。如果用户在页面A修改了一条记事,然后切换到页面B,结果页面B显示的还是修改之前的内容,怎么解决一致性呢?
在实际鸿蒙开发中,如果使用的AppStorage来存数据,比如一个记事本应用,用户可以在不同的页面或组件里添加、修改记事内容,而这些内容都是存储在AppStorage里的。如果用户在页面A修改了一条记事,然后切换到页面B,结果页面B显示的还是修改之前的内容,怎么解决一致性呢?
1 回答2.2k 阅读
1 回答1.8k 阅读
2 回答1.1k 阅读
基于ArkTS提供的@StorageProp和@StorageLink装饰器来建立数据之间等同步关系。
建立AppStorage和自定义组件的联系,需要使用@StorageProp和@StorageLink装饰器。使用@StorageProp(key)/@StorageLink(key)装饰组件内的变量,key标识了AppStorage的属性。
当自定义组件初始化的时候,会使用AppStorage中对应key的属性值将@StorageProp(key)/@StorageLink(key)装饰的变量初始化。由于应用逻辑的差异,无法确认是否在组件初始化之前向AppStorage实例中存入了对应的属性,所以AppStorage不一定存在key对应的属性,因此@StorageProp(key)/@StorageLink(key)装饰的变量进行本地初始化是必要的。
@StorageProp(key)是和AppStorage中key对应的属性建立单向数据同步,允许本地改变,但是对于@StorageProp,本地的修改永远不会同步回AppStorage中,相反,如果AppStorage给定key的属性发生改变,改变会被同步给@StorageProp,并覆盖掉本地的修改。
@StorageLink变量装饰器与AppStorage配合使用,它在AppStorage中的属性创建双向数据同步。