在开发 Harmony 应用中会遇到多模块数据共享的场景,尝试寻找类似于 vuex 的状态管理仓库,官方提供了 @StorageLink装饰器 用于做应用内的状态同步,并提供双向数据绑定和数据持久化的功能
双向同步数据示例
@Entry
@Component
struct EntryComponent {
@StorageLink('key1') link1: string = 'hello'
build() {
Column({ space: 20 }) {
Text(this.link1).fontSize(30)
.onClick(() => {
this.link1 = '你好'
})
}
}
}
@Entry
@Component
struct Entry2Component {
@StorageLink('key1') link1: string = ''
build() {
text(this.link1)
}
}
上面代码当 EntryComponent 页面的 key1 发生数据变化时, Entry2Component 页面会自动更新 key1 的并渲染到页面上
数据持久化
A页面
PersistentStorage.PersistProp("key1", "hello")
@Entry
@Component
struct EntryComponent {
@StorageLink('key1') link1: string = 'hello'
build() {
Column({ space: 20 }) {
Text(this.link1).fontSize(50)
.onClick(() => {
this.link1 = '你好,鸿蒙!'
})
}
}
}
b页面
@Entry
@Component
struct EntryComponent {
@StorageLink('key1') link1: string = ''
build() {
Column({ space: 20 }) {
Text(this.link1)
}
}
}
如上代码当 A 页面数据发生变化时, B 页面会更新数据,并对该数据进行持久化处理(退出应用后状态不会被重置)