【学习笔记】Vue3源码解析:第二部分-实现响应式(4)

本文详细解读了Vue3中响应式的实现机制,涉及数组修改、对象触发更新以及处理数组长度变化的方法。通过逐节剖析,讲解了`createSetter`、`trigger`方法和`targetMap`的作用,以及如何确保数据的实时更新。
摘要由CSDN通过智能技术生成

课程地址:【已完结】全网最详细Vue3源码解析!(一行行带你手写Vue3源码)

第二部分-实现响应式(4):(对应课程的第15-17节)

第15节:《处理数组修改或者新增》

1、在操作符中新增:

在这里插入图片描述

2、在shared中增加公告方法 hasChange :

在这里插入图片描述

3、在 createSetter 中增加如下逻辑:为目标对象添加新值或访问其已有值时,触发trigger方法,这个方法负责触发更新:

在这里插入图片描述

第16节:《处理对象的触发更新》

1、在 effect.ts中定义trigger方法,打印参数值进行测试:

在这里插入图片描述

2、测试过程中发现没有打印出预期结果,排查发现赋值操作写到了获取老值上面,修改为如下顺序:

在这里插入图片描述

3、打印结果如下:

在这里插入图片描述

4、trigger方法中添加如下逻辑:在存储effect的表结构targetMap中,找到目标对象对应的map,并在这个map中取出key对应的set,这个set中存储的即是目标对象的这个key被读取时收集到的effect:

在这里插入图片描述

5、继续添加如下逻辑:写一个add方法,入参为目标对象的key对应的set,即存储的收集到的effect的set集合,在add方法中,遍历这个set集合,并将其中每个元素添加进另外一个准备好的set集合effectSet中。之所以遍历收集到的effect的set集合并将每个元素又放入另一个Set集合,是为了去除重复。

add方法执行完成后,遍历effectSet,执行其中的每一个effect:

在这里插入图片描述

第17节:《处理数组的触发更新》

1、针对修改数组长度的特殊处理:

在这里插入图片描述

2、

(备注:这一节我听得不是特别明白,笔记暂时不完善,待后续继续整理完善;如有已理解此部分的小伙伴也请不吝赐教,帮忙指点一二,谢谢!)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值