美文网首页
vue中key的作用和工作原理

vue中key的作用和工作原理

作者: JJWANNA1 | 来源:发表于2020-04-12 17:02 被阅读0次

    源码中找答案:src\core\vdom\patch.js - updateChildren()

    测试代码如下

    <!DOCTYPE html>
    <html>
    <head> 
      <title>03-key的作用及原理?</title>
    </head>
    <body>
        <div id="demo">
              <p v-for="item in items" :key="item">{{item}}</p> 
        </div>
      <script src="../../dist/vue.js"></script>
       <script>
        // 创建实例
        const app = new Vue({
                el: '#demo',
                data: { items: ['a', 'b', 'c', 'd', 'e'] },
                mounted () {
                        setTimeout(() => { 
                              this.items.splice(2, 0, 'f')
                        }, 2000); 
                },
          });
        </script>
    </body>
    </html>
    
    

    上面案例重现的是以下过程


    11.jpg

    不使用key


    22.png

    如果使用key

    • // 首次循环patch A
      ABCDE
      ABFCDE
    • // 第2次循环patch B
      BCDE
      BFCDE
    • // 第3次循环patch E
      CDE
      FCDE
    • // 第4次循环patch D
      CD
      FCD
    • // 第5次循环patch C
      C
      FC
    • // oldCh全部处理结束,newCh中剩下的F,创建F并插入到C前面

    结论

    1. key的作用主要是为了高效的更新虚拟DOM,其原理是vue在patch过程中通过key可以精准判断两 个节点是否是同一个,从而避免频繁更新不同元素,使得整个patch过程更加高效,减少DOM操作量,提高性能。
    2. 若不设置key还可能在列表更新时引发一些隐蔽的bug
    3. vue中在使用相同标签名元素的过渡切换时,也会使用到key属性,其目的也是为了让vue可以区分它们,否则vue只会替换其内部属性而不会触发过渡效果。

    相关文章

      网友评论

          本文标题:vue中key的作用和工作原理

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