#HarmonyOS篇:管理组件拥有的状态状态管理V2
@ComponentV2装饰器
@ObservedV2装饰器 + @Trace装饰器 深度属性变化
现有状态管理V1版本无法实现对嵌套类对象属性变化的直接观测。
@Local装饰器
状态管理V1使用@State装饰器定义组件中的基础状态变量,该状态变量常用来作为组件内部状态,在组件内使用。但由于@State装饰器又能够从外部初始化,因此无法确保@State装饰变量的初始值一定为组件内部定义的值。
@Param
@Param不仅可以接受组件外部输入,还可以接受@Local的同步变化。在阅读本文档前。
@Once
@Provider + @Consumer
Monitor状态变量修改监听
-
@Monitor监听的变量需要被@Local、@Param、@Provider、@Consumer、@Computed装饰,未被状态变量装饰器装饰的变量在变化时无法被监听。
-
未被@Trace装饰的属性无法被@Monitor监听到变化。
v1版本@Watch局限性,无法对对象、数组中某一个属性变化的监听,且无法捕获变化之前的值 。
@ComponentV2
export struct Dashboard {@Local title: string = '以前';@Monitor('title')onChangeTitle(monitor: IMonitor) {monitor.dirty.forEach((path: string) => {console.info('变化前---', monitor.value(path)?.before);console.info('变化后---', monitor.value(path)?.now)});}build() {Column() {Text(this.title)Button('改变标题').onClick((event: ClickEvent) => {this.title = '现在'})}}
}
@Computed计算属性
@Computed装饰的方法只有在初始化,或者其被计算的状态变量改变时,才会发生重新计算。
