HarmonyOS状态同步

87 阅读3分钟

众所周知,在鸿蒙应用开发中,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