Атрибут key
играет ключевую роль в алгоритме виртуального DOM Vue, определяя, когда элементы должны быть переиспользованы, а когда созданы заново. Рассмотрим ситуации, когда целесообразно переиспользование элементов.
Когда элементы списка остаются теми же, но меняется их порядок:
<ul>
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</ul>
Что происходит:
key
При переключении между похожими компонентами:
<component :is="currentComponent" :key="componentType"></component>
Без key:
С key:
<template v-if="loginType === 'email'">
<input placeholder="Email" key="email-input">
</template>
<template v-else>
<input placeholder="Phone" key="phone-input">
</template>
Почему важно:
key
Vue переиспользовал бы тот же <input>
key
создаются отдельные инпуты с сохранением их состояний<div v-if="show" key="a">Content A</div>
<div v-else key="a">Content B</div> <!-- Будет переиспользован -->
vs
<div v-if="show" key="a">Content A</div>
<div v-else key="b">Content B</div> <!-- Будет создан новый -->
<transition>
<div key="currentView">{{ currentView }}</div>
</transition>
<component :is="view" :key="view"></component>
<form v-if="isEditing" key="edit-form">
<!-- поля редактирования -->
</form>
<form v-else key="view-form">
<!-- поля просмотра -->
</form>
:key="`${item.category}-${item.id}`"
Переиспользование элементов с атрибутом key
применяется для оптимизации производительности при работе со списками, сохранения состояния компонентов и контролируемого управления жизненным циклом элементов. Правильное использование ключей — важный аспект создания эффективных Vue-приложений.