@Entry
@Component
export struct Demodd {
@State aa: a = new a();
build() {
Column() {
Text("当前值:" + this.aa.name)
Text("在外部调用方法能够更新视图")
.onClick(() => {
this.aa.setv('3')
})
// Text("变更")
// .onClick(() => {
// this.aa.setv();
// })
}
}
}
@Observed
class a {
name: string = '2';
constructor() {
setTimeout(() => {
this.setv();
console.log("定时器执行完毕")
}, 2000)
}
setv(v: string = '1') {
this.name = v
}
}
- 定时器中执行的setv方法,虽然值变更了,但是视图未更新。
- 在视图中点击执行setv方法,视图更新了。
在类的构造函数中对成员变量进行赋值或修改时,这些修改不会经过@Observed装饰器的代理。因此,即使在定时器中修改了类中的成员变量,UI也不会刷新 。这是因为@Observed装饰器的代理机制仅在实例化时生效,而构造函数中的修改不经过代理。
可以参考下:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-new-monitor-V5\#%E6%A6%82%E8%BF%B0