鸿蒙HarmonyOS开发:应用的状态管理,LocalStorage,AppStorage,PersistentStorage

状态共享相关的装饰器(@State、@Prop、@Link、@Provide、@Consume等),但是这些装饰器仅能在两个组件之间共享状态,如果开发者需要在一个页面内的所有组件中共享状态,或者是在多个页面之间共享状态,这些装饰器便不再适用了,此时我们需要的就是应用级状态管理功能。

一、页面级UI状态存储:LocalStorage

LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage支持UIAbility实例内多个页面间状态共享。

ArkTs提供了两个装饰器用于访问LocalStorage,分别是@LocalStorageProp和@LocalStorageLink,前者可以和LocalStorage实现单向同步,后者可以和LocalStorage实现双向同步。

单向
@LocalStorageProp

双向
@LocalStorageLink

//父组件

let storage = new LocalStorage({ count: 0 });

@Entry(storage)
@Component
struct Parent {
  //与storage中的count属性双向同步
  @LocalStorageLink('count') count: number = 0;
  
  build(){
    Child()
  }
}

//子组件

@Component
struct Child {

  //与storage中的count属性单向同步
  @LocalStorageProp('count') count: number = 0;

  build(){
    ...
  }
}

二、应用全局的UI状态存储:AppStorage

AppStorage用于存储应用级的状态数据,位于AppStorage中的状态数据可以在整个应用的所有组件中共享。

ArkTs提供了两个装饰器用于访问AppStorage实例,分别是@StorageProp和@StorageLink,前者可以和AppStorage实现单向同步,后者可以和AppStorage实现双向同步。

//PageOne

AppStorage.SetOrCreate('count', 0)

@Entry
@Component
struct PageOne {
  //与AppStorage中的count属性双向同步
  @StorageLink('count') count: number = 0;

  build(){
    ...
  }
}

//PageTwo

@Entry
@Component
struct PageTwo {
  //与AppStorage中的count属性单向同步
  @StorageProp('count') count: number = 0;

  build(){
    ...
  }
}

三、持久化存储UI状态:PersistentStorage

前两个小节介绍的LocalStorage和AppStorage都是运行时的内存,但是在应用退出再次启动后,依然能保存选定的结果,是应用开发中十分常见的现象,这就需要用到PersistentStorage。

PersistentStorage是应用程序中的可选单例对象。此对象的作用是持久化存储选定的AppStorage属性,以确保这些属性在应用程序重新启动时的值与应用程序关闭时的值相同。

限制条件
number, string, boolean, enum 等简单类型。

持久化数据是一个相对缓慢的操作,应用程序应避免以下情况:

持久化大型数据集。
持久化经常变化的变量。

PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后才可以被调用,早于该时机调用会导致持久化失败。

PersistentStorage.PersistProp('count', 0);

@Entry
@Component
struct Index {
  @StorageLink('count') count: number = 0

  build() {
    Row() {
      Column() {
        // 应用退出时会保存当前结果。重新启动后,会显示上一次的保存结果
        Text(`${this.count}`)
          .onClick(() => {
            this.count += 1;
          })
      }
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹荣乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值