在HarmonyOS中如何高效监听嵌套对象属性变化?

在HarmonyOS中如何高效监听嵌套对象属性变化?

阅读 752
2 个回答

使用@ObjectLink person:Person仅能观察其代理 Person 的属性变化,若想观察 person 类的嵌套类 address 的属性变化,需要同时使用@ObjectLink 代理 address 这个类,这样该类中属性变化时,才会被观察到。使用@Watch 监听的对象,只能监听一层数据变化,多层次数据变更无法监听,同@State 状态管理机制一致,规避方式为把整体更换数据源改为更新 item 中的属性值,然后用@ObjectLink 和@Observed 来监听 item 的变化。

  1. 标记类以供观察:使用@Observed装饰器标记需要监听的嵌套类。
@Observed
class NestedClass {
  constructor(public property: any) {}
}
  1. 在组件中建立数据链接:使用@ObjectLink装饰器在组件中创建与@Observed类的实例的链接。
@Component
struct SomeComponent {
  @ObjectLink linkedObject: NestedClass;
  
  build() {
    // UI构建逻辑
  }
}
  1. 创建并使用实例:在父组件中创建@Observed类的实例,并将其传递给子组件。
@Entry
@Component
struct ParentComponent {
  @State nestedObject: NestedClass = new NestedClass("SomeValue");
  
  build() {
    SomeComponent({ linkedObject: this.nestedObject });
  }
}

NestedClassproperty变化时,由于NestedClass@Observed标记,且SomeComponent中的linkedObject使用了@ObjectLink,UI会自动更新以反映这一变化。这样,你就不需要手动更新UI,而是让系统自动处理数据和UI之间的同步。

推荐问题