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

相关推荐
子兮曰13 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰13 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万13 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝13 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A13 小时前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋14 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁14 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
honkun615 小时前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs199116 小时前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
汉堡大王952716 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端