HarmonyOS 鸿蒙Next Observed 以及@ObjectLink无法更新UI
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的问题,通常与数据响应性和绑定机制有关。请确保:
- 被@ObjectLink或@Observed修饰的类是正确实例化并通过属性传递的。
- 对于数组或列表,确保在修改内部对象属性后,整个数组或列表对象本身被重新赋值或触发更新。
- 检查是否有其他代码(如异步操作)影响了UI的更新时机。
如果问题依旧没法解决,请加我微信,我的微信是itying888,以便进一步分析解决。