Компоненты в Petite-Vue — это основа организации и повторного использования UI-частей. Они позволяют изолировать функциональность, что делает приложение более масштабируемым и понятным. В отличие от Vue.js, Petite-Vue фокусируется на легкости и минимизме, что влияет на структуру и особенности работы с компонентами.
В Petite-Vue компоненты — это функциональные блоки, которые описывают поведение и внешний вид UI. Каждый компонент включает в себя:
Пример компонента в Petite-Vue:
<div x-data="{ count: 0 }">
<button @click="count++">Увеличить</button>
<p>Значение: <span x-text="count"></span></p>
</div>
В этом примере мы видим минимальный компонент с состоянием
count, которое увеличивается при клике на кнопку. Это
пример компонента, который полностью описан в одном элементе HTML, что
характерно для Petite-Vue.
Состояние компонента — это данные, которые могут изменяться в
процессе работы компонента. В Petite-Vue для этого используется
директива x-data. Она инициализирует объект, который хранит
все переменные состояния компонента.
Пример:
<div x-data="{ message: 'Привет, мир!' }">
<p x-text="message"></p>
</div>
Здесь состояние компонента содержит одну переменную
message, которая выводится в параграф. Это минимальный
пример, показывающий работу с состоянием.
Методы компонента в Petite-Vue описываются в том же объекте, что и
состояние, и вызываются через привязку к элементам с использованием
директивы @. Методы могут изменять состояние или выполнять
другие действия, такие как обработка событий.
Пример:
<div x-data="{ count: 0, increment() { this.count++ } }">
<button @click="increment">Увеличить</button>
<p>Значение: <span x-text="count"></span></p>
</div>
В этом примере метод increment увеличивает значение
переменной count. Обработчик события @click
привязан к этому методу, что позволяет изменять состояние
компонента.
Petite-Vue ориентирован на простоту, но при этом поддерживает взаимодействие между компонентами. Взаимодействие может происходить через глобальные события, связывание данных между компонентами или прямую передачу данных с использованием атрибутов.
Пример передачи данных:
<div x-data="{ parentData: 'Данные из родителя' }">
<div x-data="{ childData: parentData }">
<p x-text="childData"></p>
</div>
</div>
Здесь данные из родительского компонента передаются в дочерний. Это позволяет компоновать UI-части, передавая информацию через их состояния.
Petite-Vue позволяет изолировать стили компонентов с помощью атрибута
x-data и директивы scoped. Это означает, что
CSS будет применяться только к элементам внутри компонента, не влияя на
внешние элементы.
Пример:
<div x-data>
<style scoped>
p {
color: red;
}
</style>
<p>Текст будет красным</p>
</div>
В этом примере стили будут применяться только к элементу
<p>, находящемуся в этом компоненте.
Жизненный цикл компонента в Petite-Vue представляет собой набор шагов, через которые проходит компонент от создания до уничтожения. Эти шаги можно отслеживать с помощью хуков жизненного цикла.
Основные хуки жизненного цикла в Petite-Vue:
Пример:
<div x-data="{ count: 0 }" x-init="console.log('Компонент инициализирован')" x-destroy="console.log('Компонент уничтожен')">
<button @click="count++">Увеличить</button>
<p>Значение: <span x-text="count"></span></p>
</div>
Для того чтобы использовать один компонент внутри другого, достаточно просто разместить его в шаблоне другого компонента. В Petite-Vue не требуется создание дополнительных классов или специфичных для фреймворка подходов. Вместо этого компоненты просто встраиваются через шаблоны.
Пример:
<div x-data="{ message: 'Привет из родителя' }">
<div x-data="{ childMessage: message }">
<p x-text="childMessage"></p>
</div>
</div>
Здесь дочерний компонент использует данные родителя, делая код компактным и легким для восприятия.
В Petite-Vue компоненты тесно связаны с директивами, такими как
x-if, x-for, x-show, которые
управляют отображением элементов в зависимости от состояния
компонента.
Пример использования директивы x-if:
<div x-data="{ isVisible: true }">
<button @click="isVisible = !isVisible">Переключить видимость</button>
<p x-if="isVisible">Этот текст отображается при true</p>
</div>
В этом примере директива x-if управляет видимостью
элемента в зависимости от состояния isVisible.
Для создания более сложных компонентов, которые требуют работы с несколькими состояниями и методами, можно комбинировать различные подходы. Например, можно создавать компоненты, которые взаимодействуют с внешними API, управляют несколькими событиями или используют различные хуки жизненного цикла.
Пример сложного компонента с загрузкой данных:
<div x-data="{ users: [], loading: true, fetchUsers() {
fetch('https://api.example.com/users')
.then(response => response.json())
.then(data => { this.users = data; this.loading = false });
} }" x-init="fetchUsers()">
<template x-if="loading">
<p>Загрузка...</p>
</template>
<template x-if="!loading">
<ul>
<template x-for="user in users" :key="user.id">
<li x-text="user.name"></li>
</template>
</ul>
</template>
</div>
В этом примере компонент загружает данные с внешнего API и отображает их после завершения загрузки.
Petite-Vue предоставляет удобный способ создания компонентов, который легко интегрируется в существующие проекты. Он основывается на минимализме и простоте, но при этом сохраняет гибкость для создания сложных компонентов. Все основные концепции, такие как управление состоянием, методы, жизненный цикл и взаимодействие компонентов, обеспечивают мощный инструмент для разработки пользовательских интерфейсов.