vue for循环不建议使用index作为key的原因

先看下面一个例子:

javascript 复制代码
<template>
  <div>
    <button @click="clickHandler">删除</button>
    <template>
      <div v-for="(item, index) in list" :key="index" >{{item.name}}</div>
    </template>
  </div>
</template>

<script>
export default {
  name: 'index',
  data () {
    return {
      list: [
        {
          id: 1,
          name: 'Person1'
        },
        {
          id: 2,
          name: 'Person2'
        },
        {
          id: 3,
          name: 'Person3'
        },
        {
          id: 4,
          name: 'Person4'
        }
      ]
    }
  },
  methods: {
    clickHandler () {
      // 删除第二个数据
      this.list.splice(1, 1)
    }
  }
}
</script>

<style scoped>

</style>

当点击按钮时,会删除数组第二个数据,这样就会导致原数组第二个数据之后数据的index发生改变,从而导致person3,和person4节点的更新,增加了额外的性能开销;

如果将key由绑定index改为绑定id,上述性能开销的问题就不会存在,因为更换key绑定时,删除第二个数据,person3和person4的id并未发生改变,dom也不会发生更新;

结论:

  • 对于没有交互的简单数组使用for时,而且数组没有唯一的id时,可考虑使用index作为key;
  • 其它情况,尽可能使用唯一的id作为for循环的key值

参考链接

相关推荐
C_心欲无痕9 小时前
前端实现水印的两种方式:SVG 与 Canvas
前端·安全·水印
尾善爱看海12 小时前
不常用的浏览器 API —— Web Speech
前端
美酒没故事°13 小时前
vue3拖拽+粘贴的综合上传器
前端·javascript·typescript
jingling55514 小时前
css进阶 | 实现罐子中的水流搅拌效果
前端·css
zhengxianyi51515 小时前
只需3句让Vue3 打包部署后通过修改配置文件修改全局变量——实时生效
vue.js·前后端分离·数据大屏·ruoyi-vue-pro优化
悟能不能悟15 小时前
前端上载文件时,上载多个文件,但是一个一个调用接口,怎么实现
前端
可问春风_ren16 小时前
前端文件上传详细解析
前端·ecmascript·reactjs·js
羊小猪~~17 小时前
【QT】--文件操作
前端·数据库·c++·后端·qt·qt6.3
晚风资源组18 小时前
CSS文字和图片在容器内垂直居中的简单方法
前端·css·css3
Miketutu18 小时前
Flutter学习 - 组件通信与网络请求Dio
开发语言·前端·javascript