HarmonyOS NEXT 实战系列07-应用状态

举报
yd_234838830 发表于 2025/03/26 14:25:04 2025/03/26
【摘要】 应用状态-AppStorageAppStorage 是应用全局的UI状态存储,不同于 @State 等装饰器仅能在组件树上传递,AppStorage的目的是为了给开发者提供更大范围的跨 Ability 基本的数据共享。设置或创建全局UI状态 setOrCreate<T>(propName: string, newValue: T): voidinterface User { name: s...
  1. 应用状态-AppStorage
    AppStorage 是应用全局的UI状态存储,不同于 @State 等装饰器仅能在组件树上传递,AppStorage的目的是为了给开发者提供更大范围的跨 Ability 基本的数据共享。

设置或创建全局UI状态 setOrCreate<T>(propName: string, newValue: T): void

interface User {
  name: string
  age: number
}

AppStorage.setOrCreate<User>('user', { name: 'jack', age: 18 })

获取全局UI状态 get<T>(propName: string): T | undefined

const user = AppStorage.get<User>('user')

@StorageProp(key) 全局UI状态单向数据同步至组件
@StorageProp('user')
user: User = {
  name: '',
  age: 0
}

@StorageLink(key) 全局UI状态双向数据同步至组件
@StorageLink('user')
user: User = {
  name: '',
  age: 0
}

2. 应用状态-持久化
PersistentStorage 提供状态变量持久化的能力,但是需要注意,其持久化和读回UI的能力都需要依赖AppStorage。PersistentStorage 将选定的 AppStorage 属性保留在设备磁盘上。

初始化在页面加载完成后进行

interface User {
  name: string
  age: number
}

PersistentStorage.persistProp<User>('user', { name: '', age: 0 })

其持久化和读回UI的能力都需要依赖 AppStorage

设置全局UI状态 set<T>(propName: string, newValue: T): boolean

AppStorage.set<User>('user', { name: 'Jack', age: 18 })

获取全局UI状态 get<T>(propName: string): T | undefined

const user = AppStorage.get<User>('user')

@StorageProp(key) 全局UI状态单向数据同步至组件

@StorageProp('user')
user: User = {
  name: '',
  age: 0
}

@StorageLink(key) 全局UI状态双向数据同步至组件

@StorageLink('user')
user: User = {
  name: '',
  age: 0
}

持久化文件:

启动模拟器运行应用后,打开编辑器右下角 Device File Browser 查看
目录 /data/app/el2/100/base/包名/haps/entry/files/persistent_storage

注意:

PersistentStorage的持久化变量最好是小于2kb的数据,不要大量的数据持久化,因为PersistentStorage写入磁盘的操作是同步的,大量的数据本地化读写会同步在UI线程中执行,影响UI渲染性能。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。