Skip to content
大纲

key 使用改变

概览

  • 非兼容 : <template v-for>key 应该设置在 <template> 标签上 (而不是设置在它的子节点上)

背景

特殊的 key attribute 被作为 Vue 的虚拟 DOM 算法的提示, 以保持对节点身份的持续跟踪。这样 Vue 就可以知道何时能够重用和修补现有节点, 以及何时需要对它们重新排序或重新创建。可以查看官方文档获取详情:

结合 <template v-for>

在 Vue2 中, <template> 标签不能拥有 key。不过, 可以为其每个子节点分别设置 key

vue
<!-- Vue 2.x -->
<template v-for="item in list">
  <div :key="'heading-' + item.id">...</div>
  <span :key="'content-' + item.id">...</span>
</template>

在 Vue3 中, key 则应该被设置在 <template> 标签上。

vue
<!-- Vue 3.x -->
<template v-for="item in list" :key="item.id">
  <div>...</div>
  <span>...</span>
</template>

类似地, 当使用 <template v-for> 时如果存在使用 v-if 的子节点, 则 key 应改为设置在 <template> 标签上。

vue
<template v-for="item in list">
  <div v-if="item.isVisible" :key="item.id">...</div>
  <span v-else :key="item.id">...</span>
</template>
vue
<template v-for="item in list" :key="item.id">
  <div v-if="item.isVisible">...</div>
  <span v-else>...</span>
</template>

Mochi's personal blog.