Vue系列之v-for中key的作用

目录


我们现在在使用 v-for 的时候,都必须会加上一个 key 值,并且很多人会使用 index 来作为 key,其实这样是不太正确的一种做法。那么 v-for 中的键值 key 到底有什么作用呢。

首先看一看 Vue 文档里的说法:

Vue系列之v-for中key的作用
在用 v-for 更新已渲染的元素列表的时候,会使用就地复用的策略;这就是说列表数据修改的时候,他会根据 key 值去判断某个值是否修改,如果修改了就重新渲染,不然就复用之前的元素。

总之,v-for 通过 key 值来提升渲染效率的

1、示例

      list: [
        {
          id: 1,
          name: '张三'
        },
        {
          id: 2,
          name: '李四'
        },
        {
          id: 3,
          name: '王五'
        }
      ]
    <ul>
      <li v-for="(item, index) in list" v-bind:key="index">{{ item.name }}</li>
    </ul>

这个场景在我们开发的时候经常会碰到,因为不加 key,vue 现在会直接报错,所以我使用 index 作为 key.

下面再举两个例子来看数据更新后的情况:

1.1、在最后一条数据后再加一条数据

      list: [
        {
          id: 1,
          name: '张三'
        },
        {
          id: 2,
          name: '李四'
        },
        {
          id: 3,
          name: '王五'
        },
        {
          id: 4,
          name: '在最后添加的一条数据'
        }
      ]

此时前三条数据直接复用之前的,新渲染最后一条数据,此时用 index 作为 key,没有任何问题。

1.2、在中间插入一条数据

      list: [
        {
          id: 1,
          name: '张三'
        },
        {
          id: 4,
          name: '在中间添加的一条数据'
        },
        {
          id: 2,
          name: '李四'
        },
        {
          id: 3,
          name: '王五'
        }
      ]

此时更新渲染数据,通过 index 定义的 key 去进行前后数据的对比,发现

之前的数据						之后的数据
								
key: 0 index: 0 name: 张三		key: 0 index: 0 name: 张三
key:1 index: 1 name: 李四		key:1 index: 1 name: 在中间添加的一条数据
key:2 index: 2 name:王五		key:2 index: 2 name:李四
								key:3 index: 3 name:王五

可以发现除了第一条数据可以复用以外,另外三台哦数据都需要重新渲染,因为 key 值发生了变化;
这时候就可以体现了一个效率问题,只插入了一条数据,却要重新渲染三条数据;

所以我们需要可以想办法让数组中不会变化的数据的 key 值也不变,所以不能通过 index 来设置 key 值,应该设置一个唯一的 id 来标识数据的唯一性;我们修改之后再来对比一下渲染的效率:

之前的数据								之后的数据
								
key: 1 id: 1 index: 0 name: 张三		key: 0 id: 1 index: 0 name: 张三
key:2 id: 2 index: 1 name: 李四		key:4 id: 4 index: 1 name: 在中间添加的一条数据
key:3 id: 3 index: 2 name:王五		key:2 id: 2 index: 2 name:李四
									key:3 id: 3 index: 3 name:王五

对比可以发现,只有一条数据发生了变化,因为其他数据的 id 都没变,所以 key 值也没变,所以只需要渲染这一条新的数据即可

所以一般推荐使用 id 作为 key 值来配合 v-for 使用。


后记

如果你感觉文章不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果你觉得该文章有一点点用处,可以给作者点个赞;\\*^o^*//
如果你想要和作者一起进步,可以微信扫描二维码,关注前端老L~~~///(^v^)\\\~~~
谢谢各位读者们啦(^_^)∠※!!!

Vue系列之v-for中key的作用

上一篇:云计算笔记


下一篇:C++基础知识 - 子类的析构函数