同样使用@State装饰器,有时第三层数据可以更新UI,有时不可以,是什么原因?

0 评论 8 浏览 0 收藏 3 分钟

本问答帖原创发布在华为开发者联盟社区 ,欢迎开发者前往论坛提问交流。

 

问题描述:

如下两段代码,逻辑基本相同,但第三层属性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)

本文由 @华为开发者联盟 授权发布于人人都是产品经理。未经作者许可,禁止转载

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!