AppStorage,PersistentStorage与StorageLink

AppStorage是应用全局状态管理器,数据存储于内存中,常见的如全局的黑暗模式,StorageLink是用来绑定AppStorage的键到ui上的工具,省去了用户手写代码的无聊过程,PersistentStorage可以绑定AppStorage的键,自动持久化到磁盘,同时支持多设备同步,也省去了无聊的手写代码过程,这个点上真的是非常方便

PersistentStorage.persistProp(‘theme’, ‘system’); 这个代码直接持久化绑定了AppStorage里面的Theme的值,所以不需要AppStorage再写一遍存储逻辑了

// 1. 初始化函数
function initApp() {
  // 设置持久化属性
  PersistentStorage.persistProp('userInput', '初始值');
}

// 2. 主页面组件
@Entry
@Component
struct SimplestDemo {
  // 双向绑定到持久化属性
  @StorageLink('userInput') input: string = '';

  aboutToAppear() {
    initApp(); // 初始化应用状态
  }

  build() {
    Column() {
      // 显示当前值
      Text(`当前值: ${this.input}`)

      // 输入框
      TextInput({ text: this.input })
        .onChange((value: string) => {
          this.input = value;//这里会同时持久化到磁盘里面
        })
      
      // 重置按钮
      Button('重置为默认值')
        .onClick(() => {
          this.input = '初始值';
        })
    }
  }
}

state

页面或组件内部的数据,用于绑定到UI

数据存储方案对比

PersistentStorage/Preferences/relationalStore/localStorage /AppStorage

方案 数据位置 生命周期 数据类型支持 典型应用场景 性能特点
AppStorage 内存 应用运行时 任意类型 全局状态共享 高速访问
PersistentStorage 内存+磁盘 应用重启后保持 基本类型(string/number/boolean) 主题/语言设置等小数据持久化 自动同步,中等性能
Preferences 磁盘 持久化存储 可序列化数据 用户配置、登录令牌等结构化数据 异步操作,适合中小数据
relationalStore 磁盘 持久化存储 结构化关系数据 通讯录、消息记录等复杂数据 支持SQL,事务处理
localStorage 内存 页面生命周期 任意类型 页面内组件间状态共享 快速,页面关闭即释放
文件存储 磁盘 持久化存储 任意二进制/文本 图片、音视频、大文件 灵活,适合大数据

LocalStorage 只限在同一个uiability里面共享数据,跨page需要使用const storage = LocalStorage.getShared();来获取

简单全局配置的多设备同步

// 1. 启用分布式同步(只需一行)
PersistentStorage.persistProp('theme', 'system', true); // 第三个参数 true 启用同步
// 2. 组件中使用
@Entry
@Component
struct ThemeSetting {
  // 双向绑定(自动同步)
  @StorageLink('theme') theme: string = 'system';
//3.权限配置(module.json5)
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.DISTRIBUTED_DATASYNC",
        "reason": "同步主题设置"
      }
    ]
  }
}
Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐