Vue <template v-for> key should be placed on the <template> tag.

报错原因:

在使用 Vue 2 开发项目时,如果在 <template> 标签上使用 v-for 并添加 key 属性,可能会遇到如下错误提示:

<template v-for> key should be placed on the <template> tag.

这个错误通常出现在使用如 VsCode 或 WebStorm 等工具进行开发时,这些工具根据 Vue 3 的规则对 Vue 2 项目进行校验,导致报错。但实际上,‌Vue 2 中 key 应该放在 <template> 的子元素上 ‌,而不是 <template> 标签本身。

解决方案如下:
方法一:将 key 放在子元素上(推荐)

如果你的 <template> 中包含多个元素,应将 key 放在这些子元素上,例如:

复制代码
<template v-for="item in list" :key="item.id">
  <div>{{ item.name }}</div>
  <span>{{ item.value }}</span>
</template>
方法二:将 <template> 替换为 <div> 并添加 key

如果不想改动结构,也可以将 <template> 替换为 <div>,并添加 key:

复制代码
<div v-for="item in list" :key="item.id">
  <div>{{ item.name }}</div>
  <span>{{ item.value }}</span>
</div>
方法三:使用 v-if="true" 绕过 ESLint 检查

在 Vue 2 中,可以为 key 所在的组件或标签添加 v-if="true",来规避 ESLint 的检测:

复制代码
<template v-for="item in list" :key="item.id" v-if="true">
  <div>{{ item.name }}</div>
</template>
方法四:配置 ESLint 忽略该规则(适用于项目全局)

在项目根目录添加或修改 .eslintrc.js 或 jsconfig.json 文件,以忽略该规则:

复制代码
{
  "eslint.validate": [
    "javascript",
    "javascriptreact",
    "vue"
  ]
}
总结
  • Vue 2 中,key 应该放在 <template> 的子元素上;
  • 若使用 Vue 3 规则校验工具(如 Volar),需注意区分 Vue 2 和 Vue 3 的语法差异;
  • 可通过替换标签、添加 v-if、修改 ESLint 配置等方式解决该问题。
相关推荐
子兮曰21 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
paopaokaka_luck1 天前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787051 天前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH1 天前
HTML 的 <video> 元素
前端·html
溪语流沙1 天前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
逐光者9331 天前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC1 天前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
CDwenhuohuo1 天前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师1 天前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划
Jmyd01231 天前
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路
前端·3d·vr·三维数字化