开天辟地 HarmonyOS(鸿蒙) - 状态管理: AppStorage

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

开天辟地 HarmonyOS(鸿蒙) - 状态管理: AppStorage

示例如下:

pages\state\AppStorageDemo.ets

/*
 * AppStorage - 全局级的状态存储,用于在多个 UIAbility 中共享数据
 * 全局 AppStorage 对象可以与 @StorageLink 做双向同步,或与 @StorageProp 做单向同步
 */

import { TitleBar } from '../TitleBar';

class Person {
  age: number;
  constructor(age: number) {
    this.age = age;
  }
}

/*
 * AppStorage.get() - 获取指定 key 的数据
 * AppStorage.setOrCreate() - 更新或新建 key/value 数据
 */
if (AppStorage.get('key1') == undefined) {
  AppStorage.setOrCreate('key1', 1000);
}
if (AppStorage.get('key2') == undefined) {
  let person = new Person(44)
  AppStorage.setOrCreate('key2', person);
}
if (AppStorage.get('key3') == undefined) {
  AppStorage.setOrCreate('key3', 2000);
}

@Entry
@Component
struct AppStorageDemo {
  /*
   * AppStorage 与 @StorageLink(key) 的指定 key 的数据会做双向同步
   * AppStorage 与 @StorageProp(key) 的指定 key 的数据会做 AppStorage 到 @StorageLink 的单向同步
   */
  @StorageLink('key1') link_key1: number = 0;
  @StorageLink('key2') link_key2: Person = new Person(0);
  @StorageProp('key3') prop_key3: number = 0;

  @State message: string = ""

  build() {
    Column({ space: 10 }) {
      TitleBar()

      Text(this.message)

      Button(`link_key1: ${this.link_key1}`).onClick(() => {
        this.link_key1 += 1;
      })

      Button(`link_key2: ${this.link_key2.age}`) .onClick(() => {
        this.link_key2.age += 1;
      })

      Button(`prop_key3: ${this.prop_key3}`).onClick(() => {
        this.prop_key3 += 1;
      })

      Button("获取和更新 AppStorage 的指定 key 的值").onClick(() => {
        /*
         * AppStorage
         *   get() - 获取指定 key 的数据
         *   link() - 获取指定 key 的 SubscribedAbstractProperty 对象
         *     get() - 获取当前 key 的数据
         *     set() - 更新当前 key 的数据,并双向同步
         *   delete() - 删除指定 key 的数据
         */
        let value1: number | undefined = AppStorage.get('key1');
        let link1: SubscribedAbstractProperty<number> = AppStorage.link('key1');
        this.message = `key1:${value1}, key1:${link1.get()}`

        link1.set(3000)
      })
    }
  }
}

源码 https://github.com/webabcd/HarmonyDemo
作者 webabcd

posted @ 2025-03-07 15:14  webabcd  阅读(82)  评论(0)    收藏  举报