diff新老节点替换的规则
- 如果新老节点不是同一个节点名称,那么就暴力删除旧的节点,创建插入新的节点
- 只能同级比较、不能跨层比较。如果跨层那么就暴力删除旧的节点,创建插入新的节点
- 如果是相同节点,又分为很多种情况:
- 新节点没有children
如果新的节点没有children,那就证明新节点是文本,那直接把旧的节点替换成新的文本
- 新节点有children,旧的没有:则创建元素添加(把旧的内容删除清空掉,增加新的)
- 新的节点有children,旧的也有children(diff算法核心)下面进行细讲
diff算法核心
新的节点有children,旧的节点也有children
1.旧前 和 新前
匹配的话:旧前指针++ 新前的指针++
2.旧后 和 新后
匹配的话:旧后的指针– 新后的指针–
3.旧前 和 新后
匹配的话:旧前的指针++ 新后的指针–
4.旧后 和 新前
匹配的话:旧后的指针– 新前的指针++
5.以上都不满足条件(查找)
新的指针++ 新的添加到页面上并且旧的中有,要给旧的赋值成undefined
6.创建或者删除