HarmonyOS @ObjectLink 渲染组件更新同步问题

代码片段如下:

@Observed
class ClassA {
  label: string = "1"

  constructor(label: string) {
    this.label = label
  }
}

@Observed
class ClassB {
  public a: ClassA;
  label: string = "1"

  constructor(a: ClassA, label: string) {
    this.a = a;
    this.label = label
  }
}

@Component
struct ViewA {
  label: string = 'date';
  @ObjectLink
  b: ClassB

  build() {
    Column() {
      Text(this.b.a.label)
      Blank().height(20)
      Button(`更改a.label`)
        .onClick(() => {
          this.b.a.label = "更改后的值"
        })
      ViewC({ a: this.b.a })
    }
  }
}


@Component
struct ViewC {
  label: string = 'date';
  @ObjectLink
  a: ClassA

  build() {
    Column() {
      Text(this.a.label)
      Blank().height(20)
    }
  }
}

@Component
export struct ViewB {
  @State b: ClassB = new ClassB(new ClassA('原始值'), "b_label");

  build() {
    Column() {
      Text(this.b.a.label)
      Blank().height(20)
      ViewA({ label: 'a_label', b: this.b })
    }
  }
}

点击ViewA button ,更改this.b.a.label = "更改后的值",只有ViewC的Text文本渲染生效,而ViewA,ViewB 的Text(this.b.a.label) 并不能更新生效,这是为什么呢

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

@ObservedV2是深度观察,这种对于嵌套的属性标记了@Trace的这种,直接可以观察到

但是对于@Observed,现在的规格对于嵌套属性,就是要向下传递一层

目前@Observed的规格就是这样了,一般不会再变动了

如果想直接观察,不想向下传递,就用V2的能力

分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS ObjectLink问题
225浏览 • 1回复 待解决
HarmonyOS 状态同步问题
211浏览 • 1回复 待解决
HarmonyOS 数据同步问题
18浏览 • 1回复 待解决
HarmonyOS lazyforEach渲染问题
150浏览 • 1回复 待解决
HarmonyOS AAID同步获取问题
231浏览 • 1回复 待解决
HarmonyOS web 同步token问题
133浏览 • 1回复 待解决
HarmonyOS 富文本渲染问题
403浏览 • 1回复 待解决
HarmonyOS 变量状态同步问题
458浏览 • 1回复 待解决
HarmonyOS 界面数据渲染问题
208浏览 • 1回复 待解决