Petite-Vue — это облегчённая библиотека для реактивного программирования в браузере, вдохновлённая Vue.js, но с минимальным весом и упрощённым API. Одним из ключевых аспектов работы с Petite-Vue является реактивность данных, включая массивы. Понимание того, как библиотека отслеживает изменения в массивах, необходимо для эффективного управления состоянием интерфейса.
В Petite-Vue реактивные данные создаются через объект
reactive, передаваемый в функцию createApp.
Массивы можно включать прямо в объект данных:
const { createApp } = PetiteVue;
createApp({
items: ['яблоко', 'банан', 'вишня']
}).mount();
Массив items становится реактивным. Любые изменения его
содержимого автоматически отражаются в DOM, если они связаны через
директивы вроде v-for или условные конструкции.
v-forДля отображения элементов массива используется директива
v-for. Она создаёт повторяющиеся элементы DOM,
синхронизированные с реактивным массивом:
<ul>
<li v-for="item in items">{{ item }}</li>
</ul>
При добавлении или удалении элементов массива DOM обновляется автоматически. Petite-Vue отслеживает не сам массив, а операции с его методами, что обеспечивает реактивность.
Petite-Vue корректно обрабатывает стандартные методы массивов, влияющие на длину или порядок элементов:
push, pop, shift,
unshiftsplice, sort, reverseПример динамического добавления элемента:
createApp({
items: ['яблоко', 'банан'],
addItem() {
this.items.push('киви');
}
}).mount();
Вызов addItem() автоматически добавит новый элемент в
DOM.
Изменение элемента массива через индекс напрямую также отслеживается, но нужно использовать реактивное присваивание:
this.items[1] = 'груша';
Petite-Vue обнаружит изменение и обновит связанный элемент DOM. Важно помнить, что добавление нового индекса, выходящего за текущую длину массива, также работает, так как библиотека делает все элементы реактивными динамически.
При работе с массивами рекомендуется использовать уникальные ключи
через директиву :key. Это позволяет корректно отслеживать
перемещение элементов и минимизировать количество перерисовок:
<ul>
<li v-for="(item, index) in items" :key="item">{{ item }}</li>
</ul>
Без ключей Petite-Vue будет повторно использовать DOM-элементы, что может привести к визуальным несоответствиям при перестановке элементов массива.
Если массив содержит объекты, Petite-Vue делает их свойства реактивными автоматически:
createApp({
users: [
{ name: 'Иван', age: 25 },
{ name: 'Мария', age: 30 }
],
incrementAge(index) {
this.users[index].age++;
}
}).mount();
Вызов incrementAge(0) увеличит возраст первого
пользователя и автоматически обновит связанный DOM.
concat, slice, filter,
map не изменяют исходный массив и не вызывают реактивного
обновления сами по себе. Их можно использовать только для вычислений и
создания новых массивов.this.items = ['новый', 'массив'],
полностью перерисует связанные элементы DOM.Для сложных вычислений на основе массивов применяются вычисляемые
свойства (computed). Они создаются через функции в объекте
данных:
createApp({
items: ['яблоко', 'банан', 'вишня'],
get reversedItems() {
return [...this.items].reverse();
}
}).mount();
reversedItems не изменяет исходный массив, но при
обновлении items автоматически пересчитывается и обновляет
связанные шаблоны.
Пустой массив также реактивен. Petite-Vue отслеживает добавление элементов и может динамически создавать DOM для новых данных:
<ul>
<li v-for="item in items">{{ item }}</li>
</ul>
<button @click="items.push('апельсин')">Добавить апельсин</button>
Нажатие кнопки добавляет элемент и сразу отображает его в списке.
v-for.:key.Правильное понимание этих особенностей позволяет создавать динамические интерфейсы, полностью управляемые реактивными массивами, без лишней логики обновления DOM.