这里写目录标题
- @LocalStorageLink。
- 使用示例
- 参考资料
@LocalStorageLink。
LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。而@LocalStorageLink则是LocalStorage 相关装饰器之一。@LocalStorageLink装饰的变量与LocalStorage中给定属性建立双向同步关系。它可以将自定义组件的状态变量最新的值同步到LocalStorage
-
本地修改发生,该修改会被写回LocalStorage中;
-
LocalStorage中的修改发生后,该修改会被同步到所有绑定LocalStorage对应key的属性上,包括单向(@LocalStorageProp和通过prop创建的单向绑定变量)、双向(@LocalStorageLink和通过link创建的双向绑定变量)变量。
使用示例
如下代码所示:
- 首先初始化了一个LocalStroage对象storage
- 将storage通过@Entry(storage)的方式传给页面,这样@Component组件就可以访问LocalStroage
- Child和Parent共同使用了Prop变量。
let storage: LocalStorage = new LocalStorage();
@Component
struct Child {// @LocalStorageLink变量装饰器与LocalStorage中的'Prop'属性建立双向绑定@LocalStorageLink('Prop') childLinkNumber: number = 1;build() {Button(`Child Value ${this.childLinkNumber}`) // 更改将同步至LocalStorage中的'PropA'以及Parent.parentLinkNumber.onClick(() => {this.childLinkNumber += 1;})}
}
// 使LocalStorage可从@Component组件访问
@Entry(storage)
@Component
struct Parent {// @LocalStorageLink变量装饰器与LocalStorage中的'Prop'属性建立双向绑定@LocalStorageLink('Prop') parentLinkNumber: number = 1;build() {Column({ space: 15 }) {Button(`Parent value ${this.parentLinkNumber}`).backgroundColor(Color.Red).onClick(() => {this.parentLinkNumber += 1;})// @Component子组件自动获得对CompA LocalStorage实例的访问权限。Child()}.alignItems(HorizontalAlign.Center).width('100%').margin({top:200})}
}
页面效果如下,分别点击Parent和Child,会发现二者的值都会一起变化。
参考资料
LocalStorage:页面级UI状态存储
@LocalStorageLink官方文档