当前位置:   article > 正文

鸿蒙eTS状态管理Observed和ObjectLink_@observed

@observed
  • @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修饰的类的属性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/333662
推荐阅读
相关标签
  

闽ICP备14008679号