学习snabbdom的diff算法
2021-10-25 23:06:15   0  举报             
     
         
 学习snabbdom 如何实现diff算法
    作者其他创作
 大纲/内容
 是
    将oldVnode包装为虚拟节点
  把oldVnode的elem中的innerText改变为newVnode的text(即使oldVnode有children属性而没有text属性,那么也没事儿,innerText一旦改变为新的text,老children就没了)
  什么都不做
  oldVnode和newVnode是不是sel和key都相同?
  有
  没有(意味着oldVnode有text)
  是DOM节点
  newVode有没有text属性?
  相同
  暴力删除旧的、插入新的
  如果是旧节点先循环完毕,说明新节点中有要插入的节点
  不同
  四判定还有剩余项
  是虚拟节点
  不是
  ①清空oldVnode中的text,②并且把newVnode的children添加到DOM中
  newVnode的text和oldVnode是否相同
  oldVnode有没有children
  oldVnode和newVnode就是内存中的同一个对象?
   没有(意味着newVnode有children)
  四判定  ① 新前与旧前 ② 新后与旧后 ③ 新后与旧前  (此种情况发生了,涉及移动节点,那么旧前指向的节点,移动到旧后之后)④ 新前与旧后 (此种情况发生了,涉及移动节点, 那么旧后指向的节点,移动到旧前之前)
  如果是新节点先循环完毕,如果老节点中还有剩余节点(旧前和新后指针),说明它们要被删除的节点
  patch函数被调用
  oldVnode是虚拟节点还是DOM节点
  最复杂的情况,就是新老Vnode都有children,此时就要进行最优雅的diff
   
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
 