赞
踩
在鸿蒙开发的过程中,遇到了从网络获取到数据后赋值给定义的变量但是发现赋值后页面的组件并没有进行刷新赋值,导致页面效果没有变化,经过咨询官方客服后,客服的回复如下:
当装饰的数据类型为复杂类型时,仅能监听到自身赋值的变化,无法监听到嵌套属性的赋值。
先了解一下数据的声明赋值过程:简单数据类型的声明和赋值都是在栈内存,使用同一个内存空间,赋值被修改,对于这块内存来说就是被修改的;
复杂数据类型的声明是在栈内存的,赋值是在堆内存的,指向对应的栈,赋值的修改对于堆内存的地址来说是被修改的,但是对于它的声明(栈内存)来说内存是没有变化的。
所以如果是使用到了一个不修改他自身的方法去修改了他的赋值,虽然他的内容发生了变化,但是对于它自身来说是没有变化的。
然后又去官网查仔细阅读了一下关于@State的文档说明,文档中允许装饰的变量类型说明是支持Object、class、string、number、boolean、enum类型以及这些类型的数组,不支持不支持any,不支持简单类型和复杂类型的联合类型,不允许使用undefined和null。也就是说如果是联合类型的实体类就需要重新给实体类中的字段赋值后再给定义的变量赋值,虽然很啰嗦,但是也只能这样写了。
示例:
定义一个实体类根据获取的网络数据进行复制
@Entry
@Component
struct DemoPage {
@
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。