【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十一)

课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发

(本篇笔记对应课程第 18 节)

P18《17.ArkUI-状态管理@Observed 和 @ObjectLink》

第一件事:嵌套对象的类型上加上 @Observed 装饰器 ,这里嵌套的还是 Person 类型,如果嵌套的是其它类型,则这些类型都需要加上 @Observed 装饰器

第二件事:需要给嵌套对象内部的对象加上 @ObjectLink 装饰器

但现在嵌套对象的内部对象是作为构造方法的参数传递的,不能加 @ObjectLink 装饰器。

这样来改造一下:定义一个组件,把内部嵌套的对象传给组件,让组件把内部嵌套的对象做成变量,变量就可以加 @ObjectLink 装饰器了,具体这样来做:

用代码来实践一下:

完善功能:当任务处于已完成状态时,任务名称变灰且加中划线:

此时验证效果,没有生效!为什么呢?因为勾选或取消勾选时,是对每个任务对象的 finished 属性进行重新赋值,对数组中的对象属性的修改,是不能感知到并触发视图更新的。

怎样实现呢?

第一步:给 Task 类加 @Observed 装饰器

第二步:在子组件中使用 @ObjectLink 接收 item 对象:

此时可以看到已经可以实现勾选完成的任务项的名称变成灰色了,说明我们实现了数组中的元素是对象时,修改对象的属性也可以让视图更新了。

解决在子组件中调用父组件中定义的方法:将这个方法作为一个参数传递给子组件

此时操作视图发现报错了!

这是因为:子组件中调用父组件中定义的方法时,方法中的this指向已经不再是父组件了,而是调用方法的子组件,而子组件中并没有对应的数据,所以报错。

怎样解决?在传递方法时为方法绑定this:

总结:

1、本节主要讲解了@Observed 和 @ObjectLink 装饰器,它们主要是用来解决 对象内的属性是嵌套对象以及数组中的元素是对象时,这些内部对象的属性变化不能引起视图更新的问题。主要解决方式是:需要监控属性变更的对象类型上添加 @Observed 装饰器,同时给嵌套的对象或者数组元素的这个对象会产生变化的变量上前加上 @ObjectLink 装饰器。一般做法是将这个对象作为参数传递给子组件,在子组件中生明接收变量时就可以加上 @ObjectLink 装饰器 了。

2、子组件调用父组件中的方法:将父组件中的方法作为参数传递给子组件,为了解决传递后this丢失的问题,需要在传递时给方法绑定当前组件实例的this。

相关推荐
andrsted24 分钟前
用练题簿小程序 - 让错题不再白错
学习·微信小程序·小程序·学习方法
2601_9499506331 分钟前
练题簿,把培训从“走过场”变成“真落地”
人工智能·学习·小程序·刷题·小程序推荐
深圳雨林凯AI4 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
问天_观心4 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
指掀涛澜天下惊4 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
star learning white4 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程4 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
lifallen5 小时前
Skill 的生命周期:问题消失以后
人工智能·学习·ai·ai编程
千谦阙听5 小时前
C++类和对象(中):默认成员函数、构造与析构、拷贝构造、运算符重载
开发语言·c++·学习
冬木家居5 小时前
40㎡客厅变形记,小家住出大自由[特殊字符]
android·经验分享·笔记·智能家居·微信公众平台