鸿蒙:AppStorageV2状态管理和数据共享
前言:
之前就用过AppStorageV2做数据共享,但是没怎么弄明白使用方法,今天研究了一阵,跟大家分享下研究结果。
我们还是和之前一样,参考官方文档和示例代码进行学习,链接如下:
文档中心https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-new-appstoragev2这里我就简单总结一下:
1、AppStorageV2类似AppStorage,全局状态共享,主要是针对类的共享。
2、如果想实现类数据变化,类需要加上@ObservedV2@Trace,并在@ComponentV2组件中配合@Local使用。
3、后面我的代码中的全局数据和组件内部的局部数据是不一样的,删除全局的数据,并不影响局部数据,所以UI不会变化。但是你打印全局的数据时,却发现没有了,那是因为被删掉了。
下面是自己研究,写的示例,大家可以配合官方文档参考下:
Index.ets
import { AppStorageV2 } from '@kit.ArkUI';
@ObservedV2
class Message{@Trace message: string = '';
}
@Entry
@ComponentV2
struct Index {@Local message: Message =AppStorageV2.connect( Message, () => new Message())!;build() {Column({space:20}) {Button(this.message.message == "" ?"点击赋值": this.message.message ).onClick(()=>{this.message.message = '父组件赋值'})// 子组件Son()// 测试Test()}.width("100%").height("100%").justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center)}
}@ComponentV2
struct Test{build() {Column({space:20}){Button( "全局数据打印").onClick(()=>{let message = AppStorageV2.connect( Message, () => new Message())!;console.log("全局数据" + message.message)})Button("获取所有的key").onClick(()=>{let keys = AppStorageV2.keys()console.log("全局的keys" + keys)})Button( "删除全局数据").onClick(()=>{AppStorageV2.remove(Message)})}}
}@ComponentV2
struct Son {@Local message: Message =AppStorageV2.connect( Message, () => new Message())!;build() {Column() {Button(this.message.message == "" ?"点击赋值": this.message.message ).onClick(()=>{this.message.message = '子组件赋值'})}}
}
效果图:
以上是个人经验分享