HarmonyOS 鸿蒙Next ArkUI中状态管理的嵌套类对象属性变化@Observed和@ObjectLink

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkUI中状态管理的嵌套类对象属性变化@Observed@ObjectLink

 ArkUI的组件之间定义的变量可以互通,变量前面加@State@Prop@Link@Provide@Consume@Observed@ObjectLink等状态。

@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化:

下一段代码中组件ViewB中b(对象)变化发生变化时,会通知ViewA 中a(对象)一起数据更新。

@Observed

class DateClass extends Date {

  constructor(args: number | string) {

    super(args)

  }

}

@Observed

class ClassB {

  public a: DateClass;

  constructor(a: DateClass) {

    this.a = a;

  }

}

@Component

struct ViewA {

  label: string = ‘date’;

  @ObjectLink a: DateClass;

  build() {

    Column() {

      Button(child increase the day by 1)

        .onClick(() => {

          this.a.setDate(this.a.getDate() + 1);

        })

      DatePicker({

        start: new Date(‘1970-1-1’),

        end: new Date(‘2100-1-1’),

        selected: this.a

      })

    }

  }

}

@Entry

@Component

struct ViewB {

  @State b: ClassB = new ClassB(new DateClass(‘2023-1-1’));

  build() {

    Column() {

      ViewA({ label: ‘date’, a: this.b.a })

      Button(parent update the new date)

        .onClick(() => {

          this.b.a = new DateClass(‘2023-07-07’);

        })

      Button(ViewB: this.b = new ClassB(new DateClass('2023-08-20')))

        .onClick(() => {

          this.b = new ClassB(new DateClass(‘2023-08-20’));

        })

    }

  }

}

1 回复

在HarmonyOS 鸿蒙Next的ArkUI中,状态管理的嵌套类对象属性变化主要通过@Observed@ObjectLink装饰器来实现。

@Observed装饰器用于观察嵌套对象或数组的属性变化。当被@Observed装饰的类的属性(非简单类型,如class、Object或数组)发生变化时,这个变化能够被实时监听和同步。使用@Observed装饰的类,其属性变化会通过代理的setter和getter通知依赖它的@ObjectLink包装类。

@ObjectLink装饰器则用于在嵌套类对象属性变化的场景中进行双向数据同步。它让子组件中的状态变量与父组件中的状态变量保持同步,相当于指向数据源的指针。但需要注意的是,@ObjectLink装饰的变量不能被赋值,否则会打断同步链并导致运行时错误。

简而言之,@Observed@ObjectLink装饰器配合使用,可以实现对嵌套类对象属性变化的实时监听和双向数据同步。如果在使用过程中遇到问题,建议检查是否按照规范正确使用这两个装饰器,并确保数据源和变量类型符合要求。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部