Атрибут key в Vue

При обновлении Vue списка элементов, отрисованного директивой v-for, по умолчанию используется стратегия обновления "на месте". Если порядок элементов массива или объекта изменился, Vue не станет перемещать элементы DOM, а просто обновит каждый элемент "на месте", чтобы он отображал новые данные по соответствующему индексу.

Чтобы подсказать Vue, как определять идентичность каждого элемента, и, таким образом, переиспользовать и упорядочивать существующие элементы, необходимо указать уникальный атрибут key для каждого элемента.

Без ключей Vue использует алгоритм, который минимизирует перемещения элементов и по-максимуму будет стараться изменять/переиспользовать элементы одного типа. При использовании ключей элементы будут переупорядочиваться в соответствии с изменением порядка следования ключей, а элементы, чьи ключи уже отсутствуют, будут всегда удаляться/уничтожаться.

Рекомендуется всегда указывать атрибут key с v-for, кроме случаев когда итерируемое содержимое DOM простое, или когда сознательно полагаетесь на стратегию обновления по умолчанию для улучшения производительности.

Как правило вопрос добавления ключей встает при переборе массива объектов. В этом случае одним из ключей объекта является уникальное поле, например, id:

data() { return { users: [ { id: 1, name: 'name1', surn: 'surn1', }, { id: 2, name: 'name2', surn: 'surn2', }, { id: 3, name: 'name3', surn: 'surn3', }, ] } }

Давайте переберем приведенный массив циклом, указав соответствующие ключи:

<template> <p v-for="user in users" :key="user.id"> {{ user.name }} {{ user.surn }} </p> </template>

Переберите циклом следующий массив и выведите названия продуктов в виде списка ul:

data() { return { products: [ { id: 1, name: 'product1', }, { id: 2, name: 'product2', }, { id: 3, name: 'product3', }, ] } }



Чат с GPT Компилятор