При работе с циклическим рендерингом в Petite-Vue
используется директива v-for, аналогичная Vue.js. Она
позволяет создавать список элементов на основе массива или объекта.
Однако для корректного отслеживания изменений в списках крайне важно
использовать ключи (key).
Ключи служат для идентификации элементов при обновлении DOM. Без них библиотека вынуждена полагаться на порядок элементов в массиве, что приводит к ненужному перерисовыванию всех элементов при изменении списка. Ключи позволяют:
Ключ добавляется через директиву v-for и атрибут
:key. Простейший пример:
<ul v-scope="{ items: ['яблоко', 'банан', 'вишня'] }">
<li v-for="(item, index) in items" :key="index">{{ item }}</li>
</ul>
Здесь index используется в качестве ключа. Однако
использование индекса оправдано только если массив статичен или
элементы не изменяют порядок. Для динамических списков
рекомендуется использовать уникальные идентификаторы:
<ul v-scope="{ items: [{id: 1, name: 'яблоко'}, {id: 2, name: 'банан'}] }">
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
Уникальность ключей Каждый элемент списка должен иметь уникальный ключ. Использование повторяющихся ключей приводит к некорректному отображению и потере состояния.
Не использовать случайные значения Генерация
ключей на основе Math.random() или текущего времени создаёт
новые ключи при каждом рендере, что полностью нивелирует
оптимизацию.
Стабильность ключей Ключи должны оставаться неизменными для одного и того же элемента. Если ключ изменится, Petite-Vue считает элемент новым и создаёт его заново.
При работе с вложенными списками рекомендуется использовать разные ключи для каждого уровня, чтобы избежать конфликтов. Например:
<div v-scope="{ categories: [{id: 1, name: 'Фрукты', items: ['яблоко', 'банан']}] }">
<div v-for="category in categories" :key="category.id">
<h3>{{ category.name }}</h3>
<ul>
<li v-for="item in category.items" :key="item">{{ item }}</li>
</ul>
</div>
</div>
Здесь category.id уникален для верхнего уровня, а
элементы массива items используют сами значения как
ключи.
Ключи позволяют Petite-Vue определять, какие элементы изменились, а какие нет, используя алгоритм диффинга. Без ключей библиотека применяет более грубый подход, перерисовывая весь список. Особенно это важно при динамических данных, например, при добавлении, удалении или сортировке элементов:
<div v-scope="{ tasks: [{id: 1, title: 'Сделать отчёт'}, {id: 2, title: 'Позвонить клиенту'}] }">
<div v-for="task in tasks" :key="task.id">{{ task.title }}</div>
</div>
Добавление нового задания в середину массива не повлечёт перерисовку остальных элементов, если использовать уникальные ключи.
Ключи в циклах — это инструмент контроля за DOM, который позволяет сохранять состояние компонентов и оптимизировать обновления, предотвращая лишние операции и визуальные артефакты.