赞
踩
- @Observed应用于类,表示该类中的数据变更被UI页面管理,例如:@Observed class ClassA {}。
- @ObjectLink应用于被@Observed所装饰类的对象,例如:@ObjectLink a: ClassA。
适应场景:子组件监听类的嵌套的属性,如下:Observer_sub1_page 子组件监听 ClassAAA对象中的ClassBBB中的bbb_a属性
class ClassAAA { public c: ClassBBB constructor(cValue: ClassBBB) { this.c = cValue; } } @Observed class ClassBBB { public bbb_a: string constructor(aValue: string = 'ok') { this.bbb_a = aValue; } } @Entry @Component struct Observer_page { @State aaa: ClassAAA = new ClassAAA(new ClassBBB()); build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { // 注意:这里不会改变 Text(`ClassBBB的bbb_a值:${this.aaa.c.bbb_a}`) .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { // 修改值,只会导致 @ObjectLink 装饰的变量所在的组件被刷新,当前组件不会刷新 this.aaa.c.bbb_a = "11111" }) Observer_sub1_page({bbb: this.aaa.c}) } .width('100%') .height('100%') } } @Component struct Observer_sub1_page { @ObjectLink bbb: ClassBBB build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Text(`ClassBBB的bbb_a值:${this.bbb.bbb_a}`) .fontSize(20) .fontWeight(FontWeight.Bold) .onClick(() => { // 修改值,只会导致 @ObjectLink 装饰的变量所在的组件被刷新,父组件不会被刷新 this.bbb.bbb_a = "22222" }) } .width('100%') .height('100%') } }
注意:@State无法监听到类嵌套类的属性,@ObjectLink可以监听到类嵌套@Observed修饰的类的属性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。