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> 上,更简洁直观。

相关推荐
天渺工作室6 小时前
实现一个adblock/adblock plus等浏览器广告拦截器检测插件
前端·javascript
阳光是sunny7 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
ZhengEnCi7 小时前
Q04-Vite禁用CSS代码分割-解决生产环境样式加载顺序混乱问题
前端·vue.js·vite
九酒7 小时前
AI Agent 开发踩坑记:口播功能非得用 APP 原生实现吗?
前端·人工智能·agent
Jackson__8 小时前
做了一段时间的AI coding后,我终于搞清了 CLI 和 MCP 的区别
前端·agent·ai编程
IT_陈寒11 小时前
JavaScript项目实战经验分享
前端·人工智能·后端
用户479492835691511 小时前
6w star,GitHub 趋势第一的 Ponytail,这个agent插件到底在火什么
前端·后端
薛定喵的谔13 小时前
我开源了一个精致的 Next.js 博客模板:Skyplume
前端·前端框架·next.js
张龙68713 小时前
构建生产级 AI Agent:工具调用与记忆架构实战指南
前端
kyriewen14 小时前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js