Petite-Vue — это облегчённая реактивная библиотека для JavaScript, созданная как упрощённая версия Vue.js. Её цель — предоставить базовые возможности реактивности и двустороннего связывания данных без необходимости сложной сборки проекта или использования большого фреймворка. Petite-Vue подходит для небольших интерактивных виджетов, прототипов и постепенного внедрения реактивности в существующие страницы.
Ключевые особенности:
Petite-Vue работает без сложной инфраструктуры. Для создания
реактивного приложения используется функция createApp,
которая связывает объект данных с DOM.
<div id="app" v-scope="{ message: 'Привет, Petite-Vue!' }">
<p>{{ message }}</p>
</div>
<script type="module">
import { createApp } from 'https://unpkg.com/petite-vue?module';
createApp().mount();
</script>
Разбор примера:
v-scope — директива, которая определяет область
видимости реактивных данных.{{ message }} — синтаксис интерполяции, автоматически
обновляющий DOM при изменении значения message.createApp().mount() — инициализация всех областей с
v-scope на странице.Любое свойство объекта в v-scope автоматически
становится реактивным. Изменения в данных мгновенно отражаются в
DOM.
<div id="counter" v-scope="{ count: 0 }">
<button @click="count++">Увеличить</button>
<p>Счётчик: {{ count }}</p>
</div>
Особенности реактивности:
Petite-Vue использует директивы, похожие на Vue.js, но только ключевые:
@click, @input.<div v-scope="{ items: ['яблоко', 'банан', 'груша'], show: true }">
<ul>
<li v-for="item in items">{{ item }}</li>
</ul>
<button @click="show = !show">Переключить</button>
<p v-if="show">Список видим</p>
</div>
Особенности директив:
v-for поддерживает перебор массивов и объектов с
доступом к ключам и индексам.v-if полностью удаляет или вставляет элемент в
DOM.@event связывает функции с событиями без
дополнительного синтаксиса.Для форм Petite-Vue поддерживает двустороннее связывание через
директиву v-model.
<div v-scope="{ text: '' }">
<input v-model="text" placeholder="Введите текст">
<p>Вы ввели: {{ text }}</p>
</div>
text.text программно обновляет значение
поля.Методы можно определять прямо в области видимости
v-scope. Они вызываются из шаблона через события или
вычисления.
<div v-scope="{
count: 0,
increment() { this.count++ },
double() { return this.count * 2 }
}">
<button @click="increment">+</button>
<p>Счётчик: {{ count }}</p>
<p>Вдвое: {{ double() }}</p>
</div>
this для доступа к реактивным
данным.Petite-Vue можно внедрять постепенно, оборачивая отдельные блоки на странице:
<div class="widget" v-scope="{ visible: false }">
<button @click="visible = !visible">Показать/Скрыть</button>
<p v-if="visible">Контент виден</p>
</div>
Изменения массивов (push, splice,
pop) автоматически отражаются в DOM при использовании
v-for.
<div v-scope="{ todos: ['Учеба', 'Кодинг'] }">
<ul>
<li v-for="(todo, index) INTOdos">{{ todo }}
<button @click="todos.splice(index, 1)">Удалить</button>
</li>
</ul>
<button @click="todos.push('Новая задача')">Добавить</button>
</div>
Petite-Vue позволяет управлять стилями и классами через реактивные данные:
<div v-scope="{ active: false }">
<button @click="active = !active">Переключить</button>
<p :class="{ 'highlight': active }">Текст</p>
</div>
:class принимает объект, где ключ — имя класса,
значение — булево выражение.:style позволяет динамически задавать стили через
объект или строку.Для отслеживания изменений данных можно использовать реактивные
эффекты с помощью функции watchEffect:
<script type="module">
import { createApp, watchEffect } from 'https://unpkg.com/petite-vue?module';
createApp({
data() {
return { count: 0 }
},
mounted() {
watchEffect(() => console.log(`Счётчик = ${this.count}`));
}
}).mount();
</script>
watchEffect автоматически запускается при любом
изменении реактивного свойства.Petite-Vue сочетает компактность и мощь реактивного программирования, позволяя создавать интерактивные интерфейсы без необходимости сложного фреймворка. Она подходит как для микровиджетов, так и для постепенного внедрения реактивности на существующих страницах.