# key
attribute
breaking
# Vue d'ensemble
- **NEW : ** Les
clés
ne sont plus nécessaires sur les branchesv-if
/v-else
/v-else-if
, puisque Vue génère maintenant automatiquement desclés
uniques.- BREAKING: Si vous fournissez manuellement des
key
s, alors chaque branche doit utiliser unekey
unique. Vous ne pouvez plus utiliser intentionnellement la mêmekey
pour forcer la réutilisation des branches.
- BREAKING: Si vous fournissez manuellement des
- BREAKING: La
key
de<template v-for>
doit être placée sur la balise<template>
(plutôt que sur ses enfants).
# Contexte
L'attribut spécial key
est utilisé comme une indication pour l'algorithme DOM virtuel de Vue pour garder une trace de l'identité d'un noeud. De cette façon, Vue sait quand il peut réutiliser et patcher les nœuds existants et quand il doit les réorganiser ou les recréer. Pour plus d'informations, consultez les sections suivantes :
# Sur les branches conditionnelles
Dans Vue 2.x, il était recommandé d'utiliser les key
s sur les branches v-if
/v-else
/v-else-if
.
<!-- Vue 2.x -->
<div v-if="condition" key="yes">Yes</div>
<div v-else key="no">No</div>
2
3
L'exemple ci-dessus fonctionne toujours dans Vue 3.x. Cependant, nous ne recommandons plus l'utilisation de l'attribut key
sur les branches v-if
/v-else
/v-else-if
, puisque des key
uniques sont maintenant générés automatiquement sur les branches conditionnelles si vous ne les fournissez pas.
<!-- Vue 3.x -->
<div v-if="condition">Yes</div>
<div v-else>No</div>
2
3
Le changement de rupture est que si vous fournissez manuellement des key
s, chaque branche doit utiliser une key
unique. Dans la plupart des cas, vous pouvez supprimer ces key
.
<!-- Vue 2.x -->
<div v-if="condition" key="a">Yes</div>
<div v-else key="a">No</div>
<!-- Vue 3.x (solution recommandée : supprimer les clés) -->
<div v-if="condition">Yes</div>
<div v-else>No</div>
<!-- Vue 3.x (solution alternative : s'assurer que les clés sont toujours uniques) -->
<div v-if="condition" key="a">Yes</div>
<div v-else key="b">No</div>
2
3
4
5
6
7
8
9
10
11
# Avec la balise <template v-for>
Dans Vue 2.x, une balise <template>
ne pouvait pas avoir de key
. Au lieu de cela, vous pouviez placer les key
s sur chacun de ses enfants.
<!-- Vue 2.x -->
<template v-for="item in list">
<div :key="item.id">...</div>
<span :key="item.id">...</span>
</template>
2
3
4
5
Dans Vue 3.x, la key
doit être placée sur la balise <template>
à la place.
<!-- Vue 3.x -->
<template v-for="item in list" :key="item.id">
<div>...</div>
<span>...</span>
</template>
2
3
4
5
De même, lorsque vous utilisez <template v-for>
avec un enfant qui utilise v-if
, la key
doit être déplacée vers le haut de la balise <template>
.
<!-- Vue 2.x -->
<template v-for="item in list">
<div v-if="item.isVisible" :key="item.id">...</div>
<span v-else :key="item.id">...</span>
</template>
<!-- Vue 3.x -->
<template v-for="item in list" :key="item.id">
<div v-if="item.isVisible">...</div>
<span v-else>...</span>
</template>
2
3
4
5
6
7
8
9
10
11