如何进行电子商务网站建设规划,邯郸网络运营中心地址在哪里,大连做企业网站哪家好,百科类网站建设无所求必满载而归#xff0c;当你降低期待#xff0c;降低欲望#xff0c;往往会得到比较好的结果#xff0c;把行动交给现在#xff0c;用心甘情愿的态度#xff0c;过随遇而安的生活#xff0c;无论结果如何#xff0c;都是一场惊喜的获得! 目录 一#xff0c;定义 … 无所求必满载而归当你降低期待降低欲望往往会得到比较好的结果把行动交给现在用心甘情愿的态度过随遇而安的生活无论结果如何都是一场惊喜的获得! 目录 一定义 二StorageProp定义 三StorageProp装饰器使用规则说明 四变量的传递/访问规则说明 五StorageLink定义 六StorageLink装饰器使用规则说明 七StorageLink变量的传递/访问规则说明 八AppStorage使用 九搭配StorageProp使用 十搭配StorageLink使用 十一注意事项 一定义
AppStorage是应用全局的UI状态存储是和应用的进程绑定的由UI框架在应用程序启动时创建为应用程序UI状态属性提供中央存储。
和AppStorage不同的是LocalStorage是页面级的通常应用于页面内的数据共享。而AppStorage是应用级的全局状态共享还相当于整个应用的“中枢”
AppStorage是在应用启动的时候会被创建的单例。它的目的是为了提供应用状态数据的中心存储这些状态数据在应用级别都是可访问的。AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。
AppStorage可以和UI组件同步且可以在应用业务逻辑中被访问。
AppStorage支持应用的主线程内多个UIAbility实例间的状态共享。
AppStorage中的属性可以被双向同步数据可以是存在于本地或远程设备上并具有不同的功能比如数据持久化。这些数据是通过业务逻辑中实现与UI解耦如果希望这些数据在UI中使用需要用到storageProp和stirageLink。
二StorageProp定义
如果要建立AppStorage和自定义组件的联系需要使用StorageProp和StorageLink装饰器。使用StorageProp(key)/StorageLink(key)装饰组件内的变量key标识了AppStorage的属性。
当自定义组件初始化的时候会使用AppStorage中对应key的属性值将StorageProp(key)/StorageLink(key)装饰的变量初始化。由于应用逻辑的差异无法确认是否在组件初始化之前向AppStorage实例中存入了对应的属性所以AppStorage不一定存在key对应的属性因此StorageProp(key)/StorageLink(key)装饰的变量进行本地初始化是必要的。
StorageProp(key)是和AppStorage中key对应的属性建立单向数据同步允许本地改变但是对于StorageProp本地的修改永远不会同步回AppStorage中相反如果AppStorage给定key的属性发生改变改变会被同步给StorageProp并覆盖掉本地的修改。
三StorageProp装饰器使用规则说明
StorageProp变量装饰器说明装饰器参数key常量字符串必填字符串需要有引号。允许装饰的变量类型Object class、string、number、boolean、enum类型以及这些类型的数组。 类型必须被指定建议和AppStorage中对应属性类型相同否则会发生类型隐式转换从而导致应用行为异常。不支持any不允许使用undefined和null。同步类型单向同步从AppStorage的对应属性到组件的状态变量。 组件本地的修改是允许的但是AppStorage中给定的属性一旦发生变化将覆盖本地的修改。被装饰变量的初始值必须指定如果AppStorage实例中不存在属性则作为初始化默认值并存入AppStorage中。
四变量的传递/访问规则说明
传递/访问说明从父节点初始化和更新禁止StorageProp不支持从父节点初始化只能AppStorage中key对应的属性初始化如果没有对应key的话将使用本地默认值初始化初始化子节点支持可用于初始化State、Link、Prop、Provide。是否支持组件外访问否。 注意 当装饰的数据类型为boolean、string、number类型时可以观察到数值的变化。 当装饰的数据类型为class或者Object时可以观察到赋值和属性赋值的变化即Object.keys(observedObject)返回的所有属性。 当装饰的对象是array时可以观察到数组添加、删除、更新数组单元的变化。 当StorageProp(key)装饰的数值改变被观察到时修改不会被同步回AppStorage对应属性键值key的属性中。 当前StorageProp(key)单向绑定的数据会被修改即仅限于当前组件的私有成员变量改变其他的绑定该key的数据不会同步改变。 当StorageProp(key)装饰的数据本身是状态变量它的改变虽然不会同步回AppStorage中但是会引起所属的自定义组件的重新渲染。 当AppStorage中key对应的属性发生改变时会同步给所有StorageProp(key)装饰的数据StorageProp(key)本地的修改将被覆盖。 五StorageLink定义
StorageLink(key)是和AppStorage中key对应的属性建立双向数据同步 本地修改发生该修改会被写回AppStorage中 AppStorage中的修改发生后该修改会被同步到所有绑定AppStorage对应key的属性上包括单向StorageProp和通过Prop创建的单向绑定变量、双向StorageLink和通过Link创建的双向绑定变量变量和其他实例比如PersistentStorage。
六StorageLink装饰器使用规则说明
StorageLink变量装饰器说明装饰器参数key常量字符串必填字符串需要有引号。允许装饰的变量类型Object、class、string、number、boolean、enum类型以及这些类型的数组。 类型必须被指定建议和AppStorage中对应属性类型相同否则会发生类型隐式转换从而导致应用行为异常。不支持any不允许使用undefined和null。同步类型双向同步从AppStorage的对应属性到自定义组件从自定义组件到AppStorage对应属性。被装饰变量的初始值必须指定如果AppStorage实例中不存在属性则作为初始化默认值并存入AppStorage中。
七StorageLink变量的传递/访问规则说明
传递/访问说明从父节点初始化和更新禁止。初始化子节点支持可用于初始化常规变量、State、Link、Prop、Provide。是否支持组件外访问否。 注意 当装饰的数据类型为boolean、string、number类型时可以观察到数值的变化。 当装饰的数据类型为class或者Object时可以观察到赋值和属性赋值的变化即Object.keys(observedObject)返回的所有属性。 当装饰的对象是array时可以观察到数组添加、删除、更新数组单元的变化。 当StorageLink(key)装饰的数值改变被观察到时修改将被同步回AppStorage对应属性键值key的属性中。 AppStorage中属性键值key对应的数据一旦改变属性键值key绑定的所有的数据包括双向StorageLink和单向StorageProp都将同步修改 当StorageLink(key)装饰的数据本身是状态变量它的改变不仅仅会同步回AppStorage中还会引起所属的自定义组件的重新渲染。 八AppStorage使用
//创建AppStorage key为yuanzhen value 222
AppStorage.SetOrCreatenumber(yuanzhen,222)
//获取属性为yuanzhen的AppStorage的value
AppStorage.Get(yuanzhen)
//设置AppStorage属性为yuanzhen的值为666 如果没有创建过 则不执行
AppStorage.Setnumber(yuanzhen,666)
九搭配StorageProp使用
父组件
import ProvideTest from ./ProvideTest;
AppStorage.SetOrCreatenumber(yuanzhen,222)Entry()
Component
struct Index {StorageProp(yuanzhen) yuanzhen:number 888build() {Column(){Text(父name: this.yuanzhen).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanzhen999})ProvideTest()}}
}
子组件
Component
export default struct ProvideTest {StorageProp(yuanzhen)yuanZhen:number 1000build() {Row() {Column() {Text(子name:this.yuanZhen).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanZhen123456})}.width(100%)}.height(100%)}
}
运行
点击父点击子
初始化的时候都是获取的初始的值222点击父只改变自己的值点击子也只改变自己的值不改变父的值。
十搭配StorageLink使用
父组件
import ProvideTest from ./ProvideTest;
AppStorage.SetOrCreatenumber(yuanzhen,222)Entry()
Component
struct Index {StorageLink(yuanzhen) yuanzhen:number 888build() {Column(){Text(父name: this.yuanzhen).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanzhen999})ProvideTest()}}
}
子组件
Component
export default struct ProvideTest {StorageLink(yuanzhen)yuanZhen:number 1000build() {Row() {Column() {Text(子name:this.yuanZhen).fontSize(50).fontWeight(FontWeight.Bold).onClick(() {this.yuanZhen123456})}.width(100%)}.height(100%)}
}
运行
点击父点击子
双向同步子组件修改会导致AppStorage里面的值修改
十一注意事项
AppStorage与PersistentStorage以及Environment配合使用时需要注意以下几点 在AppStorage中创建属性后调用PersistentStorage.persistProp()接口时会使用在AppStorage中已经存在的值并覆盖PersistentStorage中的同名属性所以建议要使用相反的调用顺序 如果在AppStorage中已经创建属性后再调用Environment.envProp()创建同名的属性会调用失败。因为AppStorage已经有同名属性Environment环境变量不会再写入AppStorage中所以建议AppStorage中属性不要使用Environment预置环境变量名。 状态装饰器装饰的变量改变会引起UI的渲染更新如果改变的变量不是用于UI更新只是用于消息传递推荐使用 emitter方式。