snabbdom core
2021-04-14 12:07:02 0 举报
vue diff core
作者其他创作
大纲/内容
sle: html tag 类型data: html 元素属性与事件children:子html元素text: 文本信息(与children互斥只存在一种)elm: Vnode实际挂载的dom节点key: Vnode唯一标识
h() => Vnode
报错退出
双指针策略1.初始化 新/旧 队列下标与当前下标元素2.开始新旧 首首 尾尾 首尾 尾首 对比 节点相同 再使用patchNode函数对比3. 若不同 则用新节点key 去旧keys数组中寻找3.1 若找到对比tagType 不同创建新节点 3.1.1 相同再patchNode函数深度对比3.3 没有找到可以相同 则创捷新节点 删除旧节点
false
vnode()
true
1.使用旧Vnode为新Vnode赋值elm2.以新 text置否有值 利用text children存在互斥开始判断2.1 有值且与旧text不等 则清空旧ch 设置新text2.2 新/旧 ch 都有值 则 调用 updateChildren()深度对比2.3 新 ch 有值 清空旧text 新建新ch dom2.4 旧ch有值 移除旧ch2.5 新旧ch都无值 且 旧text有值 清空旧text
snabbdom
1.参数[0]是不是Vnode 若不是则用dom信息创建空Vnode2. 调用sameVnode()两个参数Vnode的是不是相同Node (key 与 sel 与 data都相同)2.1 相同node 调用patchVnode() 深度对比2.2 不同直接使用新Vnode创建都没并替换
0 条评论
回复 删除
下一页