HarmonyOS 鸿蒙Next Observed 以及@ObjectLink无法更新UI

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

HarmonyOS 鸿蒙Next Observed 以及@ObjectLink无法更新UI

@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 classB: ClassB;

build() {
Column() {
Button(child increase the day by 1)
.onClick(() => {
this.classB.a.setDate(this.classB.a.getDate() + 1);
console.log(‘date:’+this.classB.a);
})
DatePicker({
start: new Date(‘1970-1-1’),
end: new Date(‘2100-1-1’),
selected: this.classB.a
})
}
}
}

@Entry
@Component
struct ViewB {
@State b: ClassB = new ClassB(new DateClass(‘2023-1-1’));

build() {
Column() {
ViewA({ label: ‘date’, classB: this.b })

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’));
})
}
}
}

Button(child increase the day by 1)这个按钮日期加1,DatePicker({ start: new Date(‘1970-1-1’), end: new Date(‘2100-1-1’), selected: this.classB.a }) UI为什么监测不到?UI没更新,求大神讲解原因

4 回复

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

后面添加

this.classB.a =new DateClass(this.classB.a.getTime())

谢谢,我知道怎么解决,不知道原理。大概知道ObjectLink只能观察一层

HarmonyOS中Observed和@ObjectLink无法更新UI的问题,通常与数据响应性和绑定机制有关。请确保:

  1. @ObjectLink@Observed修饰的类是正确实例化并通过属性传递的。
  2. 对于数组或列表,确保在修改内部对象属性后,整个数组或列表对象本身被重新赋值或触发更新。
  3. 检查是否有其他代码(如异步操作)影响了UI的更新时机。

如果问题依旧没法解决,请加我微信,我的微信是itying888,以便进一步分析解决。

回到顶部