鸿蒙小助手 2026-02-11 13:21:16 发布本问答帖原创发布在华为开发者联盟社区 ,欢迎开发者前往论坛提问交流。
问题描述:
如下两段代码,逻辑基本相同,但第三层属性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)
相关推荐
写不完的需求
2760
0
3145
0
曹老板在武汉
6281
0
3943
0
老何的技术日记
6776
0
鸿蒙小助手
致力于为鸿蒙开发者谋福利
帖子
提问
粉丝
鸿蒙直播全链路开发实践:打造丝滑稳定的直播体验
2026-03-11 15:26:18 发布鸿蒙软件工程实践:手把手教你优化编译配置,提升鸿蒙编译效率
2026-03-04 17:02:11 发布