摘要: 1.创建key<=>index的map映射 在 vue 的 diff 函数交叉对比中,当新节点跟旧节点头尾交叉对比没有结果时,会根据新节点的 key 去对比旧节点数组中的 key,从而找到相应旧节点(这里对应的是一个 key => index 的 map 映射)。如果没有找到就认为是一个新增节点。而 阅读全文
posted @ 2020-11-25 16:19 vickylinj 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 当用户指定了watch中的deep属性为true时,如果当时监控的属性是数组类型,会对对象中的每一项进行求值,此时会将当前watcher存入到对应属性的依赖中,这样数组中对象发生变化时也会通知数据更新。内部原理就是递归,耗费性能 。 整体流程: initWatch 初期化user watcher(1 阅读全文
posted @ 2020-11-25 11:18 vickylinj 阅读(1329) 评论(0) 推荐(0) 编辑
摘要: 默认computed也是一个watcher,具备缓存,只有当依赖的属性发生变化才会更新视图。 原理图: 流程:computed watcher在defineReactive的get中订阅属性的变化(4),在defineReactive的set时触发notify(4),notify调用每个订阅了改属性 阅读全文
posted @ 2020-11-25 10:48 vickylinj 阅读(915) 评论(0) 推荐(0) 编辑