鸿蒙:AppStorageV2状态管理和数据共享

发布于:2025-09-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

前言:

之前就用过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 = '子组件赋值'
     })
    }
  }
}

效果图:

以上是个人经验分享


网站公告

今日签到

点亮在社区的每一天
去签到