v-for — директива Vue.js, предназначенная для
динамического рендеринга списков и массивов данных. Она позволяет
создавать повторяющиеся элементы в DOM на основе данных из массива,
объекта или числа повторений. Основное преимущество использования
v-for заключается в автоматическом связывании данных и
шаблона, что упрощает работу с динамическими интерфейсами.
<ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
item in items — цикл проходит по массиву
items, каждый элемент доступен через переменную
item.:key="item.id" — уникальный идентификатор элемента,
необходимый для оптимизации рендеринга. Vue использует ключи для
отслеживания изменений и минимизации перерисовок.Ключи являются обязательными при рендеринге списков, особенно если элементы могут добавляться, удаляться или изменяться динамически. Отсутствие ключей может привести к неправильной работе реактивности и неожиданным багам в интерфейсе.
v-for поддерживает перебор свойств объектов:
<ul>
<li v-for="(value, key) in user" :key="key">{{ key }}: {{ value }}</li>
</ul>
value — значение свойства.key — имя свойства объекта.index — опциональный параметр, показывающий порядковый
номер элемента (начиная с 0).Индекс элемента часто используется для отображения порядковых номеров или в качестве временного ключа (если нет уникального идентификатора):
<ul>
<li v-for="(item, index) in items" :key="index">{{ index + 1 }}. {{ item.name }}</li>
</ul>
Использование индекса как ключа допустимо, но не рекомендуется, если элементы списка могут динамически изменяться, так как это может вызвать неправильное обновление DOM.
v-for может использоваться для повторения элементов
заданное количество раз:
<div v-for="n in 5" :key="n">Элемент {{ n }}</div>
В этом случае Vue создает пять <div> элементов с
числами от 1 до 5.
v-for можно использовать внутри другого
v-for, что удобно для работы с многомерными массивами или
таблицами:
<table>
<tr v-for="(row, rowIndex) in matrix" :key="rowIndex">
<td v-for="(cell, cellIndex) in row" :key="cellIndex">{{ cell }}</td>
</tr>
</table>
Вложенные циклы позволяют создавать сложные структуры данных, такие как сетки, таблицы и списки с группировкой.
v-forДиректива v-for тесно интегрируется с обработчиками
событий Vue. Можно назначать события на каждый элемент списка, передавая
данные текущего элемента:
<ul>
<li v-for="item in items" :key="item.id">
{{ item.name }}
<button @click="removeItem(item.id)">Удалить</button>
</li>
</ul>
Метод removeItem может быть определен в
methods компонента и обеспечивать удаление элемента из
массива:
methods: {
removeItem(id) {
this.items = this.items.filter(item => item.id !== id);
}
}
Благодаря реактивности Vue, список автоматически обновляется после изменения массива.
props. Это уменьшает количество перерисовок и
улучшает читаемость кода.Перед рендерингом списка массив можно фильтровать или сортировать
прямо в шаблоне с использованием вычисляемых свойств
(computed):
computed: {
sortedItems() {
return this.items.sort((a, b) => a.name.localeCompare(b.name));
}
}
<ul>
<li v-for="item in sortedItems" :key="item.id">{{ item.name }}</li>
</ul>
Такой подход сохраняет шаблон чистым и обеспечивает реактивное обновление интерфейса при изменении данных.
v-forpush,
pop, shift, unshift,
splice, sort, reverse. Прямое
присваивание по индексу (items[1] = newValue) не
является реактивным, для этого следует использовать
Vue.set или this.$set.v-for — основной инструмент работы со списками и
динамическим контентом в Vue.js. Он обеспечивает:
Правильное использование ключей и структурирование данных позволяет создавать производительные и масштабируемые интерфейсы.