В Petite-Vue директива v-for используется для итерации
по массивам, объектам и диапазонам чисел, создавая динамический набор
элементов на основе данных. Синтаксис директивы схож с Vue.js, однако
Petite-Vue ориентирована на минимализм, поэтому конфигурация и работа с
данными выполняется проще и быстрее.
Простейший пример итерации по массиву выглядит так:
<div v-scope="{ items: ['яблоко', 'банан', 'вишня'] }">
<ul>
<li v-for="item in items">{{ item }}</li>
</ul>
</div>
Здесь v-for="item in items" создаёт новый
<li> для каждого элемента массива items.
Переменная item доступна внутри блока и может быть
использована для отображения данных.
Для получения индекса текущего элемента добавляется второй параметр:
<li v-for="(item, index) in items">{{ index }}: {{ item }}</li>
index автоматически принимает числовое значение позиции
элемента в массиве, начиная с нуля.
v-for позволяет перебирать свойства объектов:
<div v-scope="{ user: { name: 'Иван', age: 30, city: 'Москва' } }">
<ul>
<li v-for="(value, key) in user">{{ key }}: {{ value }}</li>
</ul>
</div>
В этом примере key получает имя свойства
(name, age, city), а
value — соответствующее значение.
Можно создать список чисел с помощью директивы
v-for:
<div>
<span v-for="n in 5">{{ n }}</span>
</div>
Это создаст пять элементов <span> с числами от 1
до 5. Petite-Vue автоматически формирует массив из указанного
диапазона.
key) при
итерацииДля эффективного обновления DOM при изменении данных рекомендуется
использовать атрибут :key. Он позволяет Petite-Vue
отслеживать элементы и минимизировать перерисовку:
<ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
item.id должен быть уникальным для каждого элемента. Без
key при изменении массива могут возникнуть лишние
перестановки и повторные рендеры.
v-for поддерживает вложенные циклы, что удобно для
работы с двумерными массивами или сложными структурами:
<div v-scope="{ matrix: [[1,2], [3,4], [5,6]] }">
<ul>
<li v-for="(row, i) in matrix">
Row {{ i }}:
<span v-for="(cell, j) in row">{{ cell }}</span>
</li>
</ul>
</div>
Внутренний v-for создаёт элементы для каждого элемента
вложенного массива, сохраняя индексы внешнего и внутреннего циклов.
Списки, создаваемые с помощью v-for, можно динамически
фильтровать и сортировать на этапе рендеринга:
<div v-scope="{ items: ['яблоко', 'банан', 'вишня'], filter: 'а' }">
<ul>
<li v-for="item in items.filter(i => i.includes(filter))">{{ item }}</li>
</ul>
</div>
Здесь список элементов обновляется автоматически при изменении
значения filter, отображая только подходящие элементы.
v-ifВ Petite-Vue можно комбинировать v-for с
v-if, однако следует учитывать, что фильтрация элементов
через v-if выполняется на этапе рендеринга каждого
элемента:
<li v-for="item in items" v-if="item.startsWith('б')">{{ item }}</li>
Для больших списков более оптимально использовать фильтры в вычисляемых выражениях или прямо в массиве.
Если объект содержит массивы или вложенные объекты,
v-for остаётся универсальным инструментом для их
отображения:
<div v-scope="{ users: [{ name: 'Анна', roles: ['admin', 'editor'] }, { name: 'Игорь', roles: ['user'] }] }">
<ul>
<li v-for="user in users">
{{ user.name }}
<ul>
<li v-for="role in user.roles">{{ role }}</li>
</ul>
</li>
</ul>
</div>
Каждое свойство и элемент вложенных массивов остаются реактивными, автоматически обновляясь при изменении данных.
v-forv-for.:key и
вычисляемые фильтры вместо v-if внутри цикла.Эти возможности делают v-for в Petite-Vue мощным
инструментом для динамического отображения данных без лишнего кода.