鸿蒙小助手 2026-02-10 16:33:00 发布本问答帖原创发布在华为开发者联盟社区 ,欢迎开发者前往论坛提问交流。
问题描述:
如下两段代码,逻辑基本相同,但第三层属性this.parent.son.son重新赋值后,代码1的UI更新成功,代码2的UI并未更新。只是将this.parent.son = this.son;换了位置,结果便不同了。不太明白原因,可以解答下我的疑惑吗?
解决方案:
@State装饰器,当装饰的数据类型为class或者Object时,可以观察到自身的赋值的变化,和其属性赋值的变化,第三层变化是无法观察的。
第一段代码中,this.parent.son = this.son是直接给parent的属性赋值,可观察;而this.parent.son.son = '333'是给第三层的属性赋值,不可观察,故UI中的this.parent.son.son不会更新。UI中this.son.son更新是因为class是引用数据类型,this.parent.son和this.son指向的是同一个堆内存中的对象,该对象的值已发生变化,框架观察到son的属性发生变化触发UI更新。
第二段代码中,this.parent.son = this.son时框架观察到parent的属性发生变化触发UI更新,这是一个异步过程,在UI更新时this.parent.son.son = '333'赋值已执行完毕,所以最终UI中的this.parent.son.son显示的是最新值。
将两次赋值分开结果就与第一段代码相同。
参考demo、详细解决方案以及相关的讨论,请点击原帖查看:
@State的观测问题求解,各位大佬能解答一下小弟的疑惑吗,真的有点懵。。。-华为开发者问答 | 华为开发者联盟 (huawei.com)
相关推荐
三元桥的水冰兔
7289
0
鸿蒙小助手
3504
0
鸿蒙小助手
7847
0
鸿蒙小助手
7676
0
鸿蒙小助手
8018
0
鸿蒙小助手
致力于为鸿蒙开发者谋福利
帖子
提问
粉丝
【划重点】HarmonyOS 应用市场审核 3.5 驳回“十大高频问题”全解析
2026-02-13 21:44:15 发布ArkUI框架运行原理与常见性能优化方案
2026-02-12 19:40:38 发布