Атрибут key
— это специальный атрибут, который обязательно нужно использовать при рендеринге списков через v-for
. Вот почему:
Vue использует key
для уникальной идентификации каждого элемента в списке. Без key
Vue будет полагаться на порядок элементов, что может привести к ошибкам при изменении списка (например, при сортировке, добавлении или удалении элементов).
<div v-for="item in items" :key="item.id">
{{ item.text }}
</div>
Когда список изменяется, Vue сравнивает старый и новый DOM, используя алгоритм diffing. key
помогает Vue точно определить, какие элементы изменились, были добавлены или удалены. Это позволяет:
Если элементы списка содержат состояние (например, input, checkbox или компоненты), отсутствие key
может привести к:
<!-- Без key - состояние может "перемешаться" при изменении списка -->
<div v-for="item in items">
<input type="checkbox"> {{ item.text }}
</div>
<!-- С key - состояние сохраняется корректно -->
<div v-for="item in items" :key="item.id">
<input type="checkbox"> {{ item.text }}
</div>
Начиная с Vue 2.2.0+, использование key
с v-for
стало строго рекомендованным, а в некоторых случаях (например, при использовании с <template v-for>
) — обязательным.
key
key
(кроме статических списков)item.id
)<!-- Плохо: использование индекса -->
<div v-for="(item, index) in items" :key="index">
{{ item.text }}
</div>
<!-- Хорошо: использование уникального ID -->
<div v-for="item in items" :key="item.id">
{{ item.text }}
</div>
Атрибут key
необходим для:
✔ Корректной работы реактивности
✔ Оптимизации производительности
✔ Сохранения состояния компонентов
✔ Предсказуемого поведения при изменениях списка
Всегда используйте key
с v-for
, если только вы не работаете с простым статическим списком.