美文网首页
虚拟DOM Diff算法解析

虚拟DOM Diff算法解析

作者: 16manman | 来源:发表于2019-03-04 17:43 被阅读0次

参考地址: https://www.jianshu.com/p/8bf3348aa236

注意: 对列表进行操作的时候,列表的key要前后保持一致
例如:

 <ul>
    <li ksy='000'>000</li>
    <li ksy='111'>111</li>
    <li ksy='222'>222</li>
    <li ksy='333'>333</li>
    <li ksy='444'>444</li>
    <li ksy='555'>555</li>
    <li ksy='666'>666</li>
  </ul>
//222后边插入 777
<ul>
    <li ksy='000'>000</li>
    <li ksy='111'>111</li>
    <li ksy='222'>222</li>
    <li ksy='777'>777</li>
    <li ksy='333'>333</li>
    <li ksy='444'>444</li>
    <li ksy='555'>555</li>
    <li ksy='666'>666</li>
  </ul>

这样react会找到位置,在222和333中间插入<li ksy='777'>777</li>,其他组件不会删除,只是执行了新组件的创建

如果使用index作为key

 <ul>
    <li ksy='0'>000</li>
    <li ksy='1'>111</li>
    <li ksy='2'>222</li>
    <li ksy='3'>333</li>
    <li ksy='4'>444</li>
    <li ksy='5'>555</li>
    <li ksy='6'>666</li>
  </ul>
//222后边插入 777
<ul>
    <li ksy='0'>000</li>
    <li ksy='1'>111</li>
    <li ksy='2'>222</li>
    <li ksy='3'>777</li>
    <li ksy='4'>333</li>
    <li ksy='5'>444</li>
    <li ksy='6'>555</li>
    <li ksy='7'>666</li>
  </ul>

则会造成,222以后的数据都会更新,在最后插入新的key=7的组件666,影响性能

总之,react是以key作为标识进行新旧dom的判断,

  • 如果key不存在,则会直接remove,
  • 如果相同的key,相同的组件,只是该children发生了变化,则会update,不同的组件,则会remove,然后插入新组件

所以key的设置,避免使用map的index索引,因为插入一条数据之后会造成下边的组件key值全部变化,尽量设为列表数据的唯一的id,提高渲染速度

相关文章

  • 虚拟dom和diff算法

    虚拟DOM和diff算法 diff:精细化比对最小量更新 真实DOM和虚拟DOM 虚拟DOM:用JavaScrip...

  • react VS Vue diff算法

    react diff diff算法的作用:数据更改,生成相应的虚拟DOM,与真实DOM作对比,通过diff算法,对...

  • 第十七天

    1.你怎么理解vue中的diff算法? diff算法是虚拟DOM技术的必然产物:通过新旧虚拟DOM作对比(即dif...

  • 虚拟DOM Diff算法解析

    React中最神奇的部分莫过于虚拟DOM,以及其高效的Diff算法。这让我们可以无需担心性能问题而”毫无顾忌”的随...

  • 虚拟DOM Diff算法解析

    参考地址: https://www.jianshu.com/p/8bf3348aa236 注意: 对列表进行操作的...

  • Diff 算法、key

    概念 DOM diff 就是对比两棵虚拟 DOM 树的算法。当组件变化时,会得到一个新的虚拟 DOM,diff 算...

  • 深入理解react中的虚拟DOM、diff算法

    文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 Re...

  • vue系列---vue-diff

    1.vue-diff 是什么? 提到vue的diff算法就不得不提一个名词 虚拟dom(Virtual DOM) ...

  • 你怎么理解vue中的diff算法?

    diff算法是虚拟 DOM 的必然产物,通过新旧虚拟 DOM 对比,将变化的地方更新在真实 DOM 上,另外也需要...

  • 理解vue2.x之diff算法

    了解diff算法前,应该先了解虚拟DOM(VNode),在vue中是先创建VNode,再通过diff算法看哪个节点...

网友评论

      本文标题:虚拟DOM Diff算法解析

      本文链接:https://www.haomeiwen.com/subject/digiuqtx.html