在HarmonyOS中如何高效监听嵌套对象属性变化?
@Observed
装饰器标记需要监听的嵌套类。@Observed
class NestedClass {
constructor(public property: any) {}
}
@ObjectLink
装饰器在组件中创建与@Observed
类的实例的链接。@Component
struct SomeComponent {
@ObjectLink linkedObject: NestedClass;
build() {
// UI构建逻辑
}
}
@Observed
类的实例,并将其传递给子组件。@Entry
@Component
struct ParentComponent {
@State nestedObject: NestedClass = new NestedClass("SomeValue");
build() {
SomeComponent({ linkedObject: this.nestedObject });
}
}
当NestedClass
的property
变化时,由于NestedClass
被@Observed
标记,且SomeComponent
中的linkedObject
使用了@ObjectLink
,UI会自动更新以反映这一变化。这样,你就不需要手动更新UI,而是让系统自动处理数据和UI之间的同步。
3 回答2.5k 阅读
1 回答857 阅读✓ 已解决
1 回答891 阅读
1 回答817 阅读
1 回答764 阅读
1 回答701 阅读
675 阅读
使用@ObjectLink person:Person仅能观察其代理 Person 的属性变化,若想观察 person 类的嵌套类 address 的属性变化,需要同时使用@ObjectLink 代理 address 这个类,这样该类中属性变化时,才会被观察到。使用@Watch 监听的对象,只能监听一层数据变化,多层次数据变更无法监听,同@State 状态管理机制一致,规避方式为把整体更换数据源改为更新 item 中的属性值,然后用@ObjectLink 和@Observed 来监听 item 的变化。