Геттеры в JavaScript — это специальные методы объектов, которые позволяют определять вычисляемые свойства. В контексте Petite-Vue, геттеры играют важную роль при работе с реактивными данными, обеспечивая автоматическое обновление пользовательского интерфейса при изменении зависимостей.
Геттер — это функция, связанная с конкретным свойством объекта, которая вызывается при его чтении. В синтаксисе JavaScript это выглядит следующим образом:
const obj = {
firstName: 'Иван',
lastName: 'Петров',
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
};
console.log(obj.fullName); // Иван Петров
Здесь fullName не хранится как отдельное значение — оно
вычисляется динамически на основе firstName и
lastName.
Petite-Vue делает реактивными объекты данных с помощью функции
createApp. Если в объекте определён геттер, он
автоматически становится реактивным, что позволяет
привязывать его к DOM и обновлять при изменении зависимостей.
Пример использования геттера в Petite-Vue:
<div v-scope="user">
<p>Имя: {{ fullName }}</p>
<input v-model="firstName" placeholder="Имя">
<input v-model="lastName" placeholder="Фамилия">
</div>
<script type="module">
import { createApp } from 'https://unpkg.com/petite-vue?module';
createApp({
firstName: 'Иван',
lastName: 'Петров',
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
}).mount();
</script>
При изменении firstName или lastName
автоматически обновляется значение fullName в DOM.
Petite-Vue отслеживает зависимости геттера и инициирует перерисовку
только при изменении этих зависимостей, что повышает эффективность.
Для полного контроля над реактивными вычисляемыми свойствами можно использовать сочетание геттера и сеттера:
const user = {
firstName: 'Иван',
lastName: 'Петров',
get fullName() {
return `${this.firstName} ${this.lastName}`;
},
set fullName(value) {
const [first, last] = value.split(' ');
this.firstName = first;
this.lastName = last;
}
};
В Petite-Vue это позволяет связывать fullName с
v-model:
<input v-model="fullName" placeholder="Полное имя">
При изменении значения в input автоматически обновляются
firstName и lastName.
Геттеры отлично сочетаются с методами и вычисляемыми свойствами внутри объекта:
const app = createApp({
count: 1,
get doubled() {
return this.count * 2;
},
increment() {
this.count++;
}
});
В шаблоне:
<p>Двойное значение: {{ doubled }}</p>
<button @click="increment">Увеличить</button>
Каждое нажатие на кнопку обновляет count, и
doubled автоматически пересчитывается, без необходимости
дополнительного вызова метода.
Геттеры становятся мощным инструментом при построении реактивных интерфейсов, позволяя создавать интуитивно понятные вычисляемые свойства, которые автоматически синхронизируются с состоянием приложения и DOM.