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++、Java和Python的菜鸟10 小时前
第9章 后端Web进阶(AOP)
java·开发语言·前端
我星期八休息11 小时前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
AC赳赳老秦12 小时前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
结网的兔子12 小时前
【前端开发】Web端迁移至 uni-app 及鸿蒙扩展方案对比
前端·uni-app·harmonyos
黄泉路醉s12 小时前
在Vant+Vue+TypeScript的H移动前端使用UnoCSS
前端·vue.js·typescript
水瓶夜之12 小时前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
笨笨狗吞噬者13 小时前
VS Code 内置浏览器打开网页
前端
SamChan9013 小时前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
甲维斯13 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·人工智能
奈斯先生Vector13 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频