vue-diff流程
2024-04-24 15:49:59 1 举报
vue-diff流程
作者其他创作
大纲/内容
删除oldS到oldE之间的老子节点对应的DOM
oldEVnode和newSVnode是否相同
开始
否
oldEVnode = oldCh[--oldE]newEVnode = newCh[--newE]
oldSVnode = oldCh[++oldS]newEVnode = newCh[--newE]
新节点是否有children
设置新老子节点起始点为0结束点为length-1
以newS到newE之间的新子节点创建DOM
是
结束
依据newSVnode创建新的DOM
oldSVnode = oldCh[++oldS]newSVnode = newCh[++newS]
patchVnode
新旧虚拟节点的子节点对比
newSVnode = newCh[++newS]
说明新子节点长度小于老子节点的长度
有
新老节点文本是否一致
创建新节点对应的DOM
patch
老节点是否有children
新节点文本替换老节点文本
把oldS到oldE之间的虚拟节点以KEY和Index构成一个映射表
通过key和tag判断新老节点是不是同一个节点(sameVnode)
删除老的节点的DOM并创建新的节点的DOM
删除老节点的children对应的DOM
是否有新节点
updateChildren
oldSVnode 和newSVnode相同(sameVnode)
oldEVnode = oldCh[--oldE]newSVnode = newCh[++newS]
把oldSVnode所对应的DOM移动到oldEVnode所对应的DOM后面
是否有老节点
新节点是否有文本
newS > newE
oldS < oldE && newS < newE
判断新老节点是不是同一个对象
oldEVnode和newEVode是否相同
以新节点的children创建DOM
oldSVnode和newEVnode是否相同
根据newSVnode的key在映射表中是否能找到
把oldEVnode所对应的DOM移动到oldSVnode所对应的DOM前面
删除老节点对应的DOM
把匹配节点所对应的DOM移动到oldSVnode所对应的DOM前面
把新的DOM放在oldSVnode所对应的节点前面
说明老子节点长度小于新子节点的长度
收藏
0 条评论
下一页