Директива v-for
- один из наиболее часто используемых инструментов во Vue для рендеринга списков данных. Рассмотрим все аспекты ее применения.
<ul>
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</ul>
<div v-for="(item, index) in items" :key="item.id">
{{ index }}. {{ item.name }}
</div>
<div v-for="value in object">
{{ value }}
</div>
<div v-for="(value, key) in object" :key="key">
{{ key }}: {{ value }}
</div>
<div v-for="(value, key, index) in object">
{{ index }}. {{ key }}: {{ value }}
</div>
<my-component
v-for="(item, index) in items"
:key="item.id"
:item="item"
:index="index"
/>
<template v-for="item in items" :key="item.id">
<div v-if="item.isActive">
{{ item.name }}
</div>
</template>
<span v-for="n in 10" :key="n">{{ n }}</span>
Обязательное использование :key:
Не изменять массив во время рендеринга:
Оптимизация производительности:
computed: {
activeItems() {
return this.items.filter(item => item.isActive);
}
}
<div v-for="item in activeItems" :key="item.id">...</div>
<div v-for="item in sortedItems()" :key="item.id">...</div>
Ключевые моменты использования v-for:
✔ Всегда указывать уникальный :key
(лучше ID, чем index)
✔ Поддерживает итерацию по массивам, объектам и числам
✔ Можно получать (item, index) для массивов
✔ Для объектов доступны (value, key, index)
✔ С компонентами работает аналогично DOM-элементам
✔ Для сложных сценариев использовать computed свойства
Типичные ошибки:
✖ Изменение данных во время рендеринга
✖ Использование index как key для изменяемых списков
✖ Сложные вычисления внутри v-for
Правильное использование v-for - залог производительного и поддерживаемого кода во Vue-приложениях.