Petite-Vue предоставляет механизм для управления состоянием и синхронизации данных между компонентами, но делает это с минимальными затратами ресурсов, сохраняя лёгкость и простоту использования. В отличие от более тяжеловесных фреймворков, где синхронизация состояния обычно включает в себя сложную архитектуру и библиотеки для обмена данными между компонентами, Petite-Vue фокусируется на прямом и понятном способе работы с состоянием, который подходит для небольших и средних проектов.
В основе синхронизации состояния в Petite-Vue лежит реактивность. Когда данные изменяются, связанные с ними компоненты автоматически обновляются. Эта реактивность основывается на концепции “обернутых” значений (wrapping values), которые отслеживают изменения и реагируют на них. Таким образом, синхронизация состояния происходит в момент изменения данных.
Для того чтобы использовать синхронизацию состояния в Petite-Vue, достаточно просто создать объект с данными и привязать его к DOM-элементам через директивы. Основные принципы работы с состоянием можно выделить следующим образом:
PetiteVue.createApp(), которые автоматически отслеживаются
библиотекой.x-text, x-model или других для отображения
данных в интерфейсе и автоматического их обновления при изменении
состояния.В Petite-Vue состояние создается через объект, передаваемый в функцию
createApp. Объект может содержать как простые примитивные
значения, так и более сложные структуры данных (массивы, объекты).
Пример создания реактивного состояния:
PetiteVue.createApp({
message: 'Привет, мир!',
count: 0,
increment() {
this.count++;
}
}).mount('#app');
Здесь создается объект с двумя переменными: message и
count. message содержит строку, а
count число. Метод increment изменяет значение
count. С помощью директив в HTML можно привязать эти данные
к элементам, что будет автоматически обновлять их при изменении.
<div id="app">
<p x-text="message"></p>
<button @click="increment">Увеличить счетчик</button>
<span x-text="count"></span>
</div>
При нажатии на кнопку вызывается метод increment,
который увеличивает значение count. Из-за реактивности,
значение на экране обновляется мгновенно.
Petite-Vue поддерживает реактивность для объектов и массивов, что позволяет использовать их для более сложных состояний.
При работе с объектами реактивность работает по аналогии с примитивами. Если объект изменяется, изменения будут автоматически отражены в интерфейсе.
Пример работы с объектом:
PetiteVue.createApp({
user: {
name: 'Иван',
age: 30
},
updateName() {
this.user.name = 'Петр';
}
}).mount('#app');
<div id="app">
<p x-text="user.name"></p>
<button @click="updateName">Сменить имя</button>
</div>
В данном примере при нажатии на кнопку имя пользователя меняется на “Петр”, и это обновление отображается в интерфейсе.
Работа с массивами аналогична объектам. При изменении элементов массива или его длины, все связанные элементы DOM обновляются автоматически.
Пример с массивом:
PetiteVue.createApp({
items: ['Яблоко', 'Банан', 'Вишня'],
addItem() {
this.items.push('Груша');
}
}).mount('#app');
<div id="app">
<ul>
<li x-for="item in items" x-text="item"></li>
</ul>
<button @click="addItem">Добавить фрукт</button>
</div>
Каждое изменение массива (например, добавление нового элемента) будет сразу же отображаться в DOM.
Когда проект становится сложнее, Petite-Vue позволяет работать с состоянием в контексте нескольких компонентов. В таких случаях синхронизация состояния может быть достигнута с помощью связывания данных между компонентами, а также использования методов для изменения состояния.
Для синхронизации состояний между родительским и дочерними компонентами можно использовать обычные свойства и методы. Данные передаются через атрибуты, а изменения состояния в одном компоненте отражаются в других.
Пример родительского компонента:
PetiteVue.createApp({
parentMessage: 'Сообщение от родителя'
}).mount('#parent');
<div id="parent">
<p x-text="parentMessage"></p>
<child-component :message="parentMessage"></child-component>
</div>
Пример дочернего компонента:
PetiteVue.createApp({
props: ['message']
}).mount('#child');
<div id="child">
<p x-text="message"></p>
</div>
Здесь родитель передает значение переменной
parentMessage в дочерний компонент через атрибут
:message, и оно отображается в дочернем компоненте.
В целом, Petite-Vue предлагает простой и удобный механизм синхронизации состояния, который идеально подходит для небольших приложений и компонентов, не требующих сложной системы управления состоянием.