Vue2 vs Vue3 中 v-for 的 key 用法对比

Vue2 vs Vue3 中 v-forkey 用法对比

Vue2 中 key 的位置

在 Vue2 中,key 必须放在 v-for 所在的元素本身上:

html 复制代码
<!-- ✅ 正确 -->
<ul>
  <li v-for="item in list" :key="item.id">{{ item.name }}</li>
</ul>

<!-- ✅ 使用 template 时,key 放在 template 上 -->
<ul>
  <template v-for="item in list">
    <li :key="item.id + '-name'">{{ item.name }}</li>
    <li :key="item.id + '-age'">{{ item.age }}</li>
  </template>
</ul>

⚠️ Vue2 中 <template> 本身不会渲染为真实 DOM,所以 key 必须放在内部的每个子元素上,不能放在 <template> 标签上。


Vue3 中 key 的位置

Vue3 对 <template v-for> 的处理做了改进key 可以直接放在 <template> 上:

html 复制代码
<!-- ✅ Vue3 推荐写法:key 放在 template 上 -->
<ul>
  <template v-for="item in list" :key="item.id">
    <li>{{ item.name }}</li>
    <li>{{ item.age }}</li>
  </template>
</ul>

<!-- ✅ 普通元素写法与 Vue2 一致 -->
<ul>
  <li v-for="item in list" :key="item.id">{{ item.name }}</li>
</ul>

核心差异对比表

场景 Vue2 Vue3
普通元素 v-for key 放元素本身 ✅ key 放元素本身 ✅
<template v-for> key内部子元素上 ⚠️ key<template> 上 ✅
key<template> ❌ 不支持(会警告) ✅ 推荐写法

其他 Vue3 的变化点

  1. v-ifv-for 优先级变了

    • Vue2:v-for 优先级 高于 v-if
    • Vue3:v-if 优先级 高于 v-for(所以不建议同时用,用 <template> 隔开)
  2. key 的推荐类型

    Vue3 明确推荐使用 string | number,避免使用对象或数组作为 key。

  3. 不再需要根节点

    Vue3 支持 Fragment,组件可以有多个根节点,配合 <template v-for :key> 更灵活。


总结一句话 :Vue2 的 <template v-for> 要把 key 打散到子元素上,Vue3 统一收到 <template> 上,更简洁直观。

相关推荐
漂流瓶jz15 小时前
总结CSS组件化演进之路:命名规范/CSS Modules/CSS in JS/原子化CSS
前端·javascript·css
踩着两条虫16 小时前
「AI + 低代码」的可视化设计器
开发语言·前端·低代码·设计模式·架构
Jagger_16 小时前
项目上线忙碌结束之后,为什么总想找点事做?
前端
GalenZhang88816 小时前
OpenClaw 配置多个飞书账号实战指南
前端·chrome·飞书·openclaw
萌新小码农‍18 小时前
python装饰器
开发语言·前端·python
threelab18 小时前
Three.js 初中数学函数可视化 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
爱学习的程序媛18 小时前
浏览器工作原理全景解析
前端·浏览器·web
我是若尘19 小时前
用 Git Worktree 同时开多个需求,不用来回 stash
前端
IT_陈寒20 小时前
Vue的v-for为什么不加key也能工作?我差点翻车
前端·人工智能·后端
小碗羊肉20 小时前
【JavaWeb | 第十二篇】项目实战——登录功能
java·前端·数据库