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值

参考链接

相关推荐
怕浪猫7 小时前
分享一个做视频的skill,这条白板视频,每一笔都是代码画的
前端·javascript·面试
aa小小7 小时前
大屏自适应缩放方案
前端·数据可视化
陪我去看海8 小时前
被要求猛出小程序,做了这个多平台多环境的部署替我承受压力
前端·微信小程序·抖音小程序
Frag0ut8 小时前
告别插件时代:HTML5 视频播放对比 Flash/Silverlight/ActiveX 的性能与技术优势解析
前端·html5·视频播放·flash·activex·流媒体技术·silverlight
用户818618028008 小时前
MongoDB文档模型设计——从建模到索引
前端
無名路人9 小时前
小程序点餐页吸顶滚动之分类按需加载,上划切换
前端·vue.js·微信小程序
竹林81810 小时前
把神经网络塞进一个浏览器标签页:端侧视觉 AI 的工程真相
前端·浏览器
乘风gg10 小时前
别跟风 AI 副业,工程师最该学的是 AI Coding
前端·ai编程·claude
Frag0ut10 小时前
深度解析:Chrome 自启动与后台常驻服务的作用、关闭方法及利弊权衡
前端·chrome
OpsEye10 小时前
当企业不再只关心能不能调用模型,而是关心值不值得调用
javascript·ai编程