都2024了,你不会还以为 index 不能做 key 吧?

vue3:key 可以使用用 index 了

本来以为大家都知道这事了,结果,看了最新的一个文章以及评论,发现一些人还以为 index 不能作为 key。这...尤雨溪是白做优化了。

先看看最新官网

cn.vuejs.org/guide/essen...

html 复制代码
<li v-for="item in items">
  {{ item.message }}
</li>

<li v-for="(item, index) in items">
  {{ parentMessage }} - {{ index }} - {{ item.message }}
</li>

有没有发现不一样的地方?居然没有key了!

再来看看关于 key 的说明------通过 key 管理状态:

Vue 默认按照"就地更新"的策略来更新通过 v-for 渲染的元素列表。当数据项的顺序改变时,Vue 不会随之移动 DOM 元素的顺序,而是就地更新每个元素,确保它们在原本指定的索引位置上渲染。

动手试试

官网这么写了就一定没有问题吗?不要迷信官网,要自己动手试试才行,我们先做个简单的例子。

js:

定义一个数组

js 复制代码
  const a = [
    'A',
    'B',
    'C',
    'D'
  ]
  const list = reactive([...a])

设置几个按钮事件:

js 复制代码
  //删除一个数组元素
  const del1 = (index: number) => {
    list.splice(index, 1)
  }

  let index = 0
  // 重新设置数组内容
  const reset1 = () => {
    index = 0
    list.length = 0
    list.push(...a)

  }
  // 在开头添加一个元素
  const addNewA = () => {
    list.unshift('aa' + index++)
  }
  // 在结尾添加一个元素
  const addNewZ = () => {
    list.push('zzz' + index++)
  }
  // 交换位置
  const update2 = () => {
    const tmp = list.splice(2,1)
    list.splice(1,0, tmp[0])
  } 

不用 key

我们对原生dom、template、自定义组件使用v-for进行测试,先按照官网不设置key:

html 复制代码
  原生dom:
  <div v-for="(item, index) in list">
    {{ index }}:{{ item }}
    <button @click="del1(index)">X</button>
  </div>
  <hr>
  template:<br>
  <template v-for="(item, index) of list" >
    {{ index }}:{{ item }}
    <button @click="del1(index)">X</button>
    <br>
  </template>
  <hr>
  <key-son
    v-for="(item) in list"
    :name="item"
  >
  </key-son>

index 作为 key

然后再使用 index 作为 key:

html 复制代码
  <div
    v-for="(item, index) in list"
    :key="index"
  >
    {{ index }}:{{ item }}
    <button @click="del1(index)">X</button>
  </div>
  <hr>
、<template
    v-for="(item, index) of list"
    :key="index"
  >
    {{ index }}:{{ item }}
    <button @click="del1(index)">X</button>
    <br>
  </template>
  <hr>
  <key-son
    v-for="(item) in list"
    :key="index"
    :name="item"
  >
  </key-son>

测试

经过反复测试,完全没有问题。不截图了,反正也不好看。

小结

  • 一般情况下完全可以不设置key,这样效率更高。
  • 如果要使用key的话,index也是可以的。
  • 如果还是不放心的话,使用啥都行。
相关推荐
从文处安12 小时前
「九九八十一难」组合式函数到底有什么用?
前端·vue.js
用户114896694410513 小时前
VUE3响应式原理——从零解析
vue.js
用户830407130570113 小时前
SPA 首屏加载速度慢怎么解决?
vue.js·webpack
一枚前端小姐姐13 小时前
低代码平台表单设计系统技术分析(实战三)
前端·vue.js·低代码
SuperEugene14 小时前
从 Vue2 到 Vue3:语法差异与迁移时最容易懵的点
前端·vue.js·面试
Leon14 小时前
新手引导 intro.js 的使用
前端·javascript·vue.js
Forever7_15 小时前
仅用一个技巧,让 JavaScript 性能提速 500%!
前端·vue.js
青屿ovo17 小时前
Vue前端页面版本检测解决方案
前端·vue.js
apollo_qwe19 小时前
深入解析Vue的mixins与hooks:复用逻辑的两种核心方式
vue.js
_AaronWong19 小时前
Vue3+Element Plus 通用表格组件封装与使用实践
前端·javascript·vue.js