众所周知,在鸿蒙应用开发中,ArkUI中使用的状态驱动UI改变的方式,接下来我们就来看看harmonyOS中提供的一些状态同步的修饰符
@State:
装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变,只影响当前页面
可修饰变量类型:Object、class、string、number、boolean、enum类型,以及这些类型的数组,必须给初始值
不支持any,不支持简单类型和复杂类型的联合类型,不允许使用undefined和null。
@Prop:
用于接收父子通信的数据单向同步-父 -> 子
在4.0版本给初始值编译器会报错,但是可用,next版本好像没问题?
外层组件更新-同步到Prop,外层传入的变量应该是一个状态变量,外层允许传入例如三元或者短路表达式的赋值,可以这么传递。 Child({ num: this.num || 0 })
4.0版本类型限制只能是 string/boolean/number
@Link:
用于父子通信的数据双向同步- 父 => 子 子 => 父
用法 @Link num:number Link修饰符禁止初始化时给初始值
父组件传入时,必须以$修饰,并且不能使用this
Link修饰的类型可以同State基本一致,可以传任意类型
@Provide: 提供者
用于提供需要数据同步的变量,供@Consume监听,实现组件间多级状态同步,双向数据同步类型允许 Object Class string number 同State,必须给定初始值
@Consume:消费者
用于监听Provide修饰的变量,变量名称必须和Provide的一致,不能给初始值
@Watch:
可观察状态变量的变化
当状态变量变化的时候,回调watch修饰的方法,用法Watch(fun)
可修饰状态符- @State @Link @Provide @Prop @ObjectLink @Provide @Consume @StorageLink @StorageProp @LocalStorageProp @LocalStorageProp
@ObjectLink
@ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步
必须为被@Observed装饰的class实例,必须指定类型。不支持简单类型,可以使用@Prop。@ObjectLink的属性是可以改变的,但是变量的分配是不允许的,也就是说这个装饰器装饰变量是只读的,不能被改变。
@ObjectLink obj: Object
@ObjectLink装饰器不能在@Entry装饰的自定义组件中使用。
不允许给定初始值
LocalStorage
同一个Ability内的几个页面数据共享
内存级状态,应用销毁数据丢失
AppStorage
整个应用内数据共享
内存级状态,应用销毁数据丢失
PersistentStorage
整个应用共享,磁盘级状态,只能在UI中声明再使用,不能再Ability中声明,必须显示在UI界面中声明之后才可以拿到磁盘状态,通过AppStorage代理使用
语法: PersistentStorage.PersistProp('highScore', '0');如果存入磁盘的是一个对象,那么获取过来的会是一个json字符串,需要自己使用JSON.parse() 转化
最大存储数据不超过2KB