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值

参考链接

相关推荐
Cache技术分享2 分钟前
331. Java Stream API - Java Stream 实战案例:找出合作最多的作者对
前端·后端
We་ct16 分钟前
LeetCode 129. 求根节点到叶节点数字之和:两种解法详解(栈+递归)
前端·算法·leetcode·typescript
Joker Zxc20 分钟前
【前端基础(Javascript部分)】1、JavaScript的基础知识(组成、应用、编写方式、注释)
开发语言·前端·javascript
HelloReader22 分钟前
Tauri 项目结构前端壳 + Rust 内核,怎么协作、怎么构建、怎么扩展
前端
Lee川24 分钟前
深入浅出:从JavaScript内存模型理解“深拷贝”的必要性与实现
javascript
HelloReader26 分钟前
Tauri 前端配置把任何前端框架“正确地”接进 Tauri(含 Vite/Next/Nuxt/Qwik/SvelteKit/Leptos/Trunk)
前端
用户57573033462429 分钟前
🔥 面试官:手写 Promise 封装 AJAX?这 5 个考点 90% 的人跪了!
javascript
上单带刀不带妹33 分钟前
【Axios 实战】网络图片地址转 File 对象,附跨域解决方案
开发语言·前端·javascript·vue
岱宗夫up34 分钟前
【前端基础】HTML + CSS + JavaScript 基础(一)
前端·css·html
SuperEugene35 分钟前
前端模块化与 import/export入门:从「乱成一团」到「清晰可维护」
前端·javascript·面试·vue