Quasar, как фреймворк на базе Vue.js, наследует все принципы реактивности Vue 3. Основной механизм заключается в том, что данные, обернутые в реактивные объекты, автоматически отслеживают изменения и инициируют перерисовку компонентов, где они используются.
Для создания реактивного состояния применяются функции из
vue:
import { reactive, ref, computed, watch } from 'vue';
Пример реактивного объекта:
const state = reactive({
counter: 0,
user: {
name: 'Alex',
age: 30
}
});
Изменения state.counter или state.user.name
автоматически обновят все компоненты, которые используют эти
свойства.
refref предназначен для создания реактивного контейнера для
примитивов, а также для получения ссылки на DOM
элемент через template ref.
const count = ref(0);
function increment() {
count.value++;
}
Особенность ref в том, что значение хранится в свойстве
.value. Это важно для реактивного отслеживания изменений.
При рендеринге в шаблоне Vue автоматически разворачивает
.value.
{{ count }}
В Quasar часто используются ref для прямого доступа к
компонентам Quasar, например, к QInput или
QDialog.
Фокус
const usernameInput = ref(null);
function focusInput() {
usernameInput.value.focus();
}
С помощью ref можно не только управлять фокусом, но и
вызывать методы компонентов Quasar, например, reset,
show или hide.
computed используется для создания вычисляемых реактивных свойств, которые автоматически пересчитываются при изменении зависимостей.
const doubled = computed(() => count.value * 2);
В Quasar это удобно для динамических стилей, фильтров и условий отображения:
const buttonLabel = computed(() => count.value > 5 ? 'Слишком много' : 'Добавить');
watch и watchEffectwatch позволяет выполнять побочные эффекты при изменении конкретных реактивных данных.
watch(count, (newVal, oldVal) => {
console.log(`Count изменился с ${oldVal} на ${newVal}`);
});
watchEffect автоматически отслеживает все реактивные
зависимости внутри функции:watchEffect(() => {
console.log(`Текущее значение count: ${count.value}`);
});
watch используется для наблюдения конкретного свойства,
а watchEffect — для реактивного реагирования на любые
изменения, которые происходят в теле функции.
Quasar добавляет реактивность не только для данных, но и для UI-состояний компонентов. Примеры:
QDialog — управление открытием через
v-model:
Содержимое диалога
const isDialogOpen = ref(false);
QInput — реактивная привязка значения:
const username = ref('');
Изменение username мгновенно отражается во всех местах,
где используется эта переменная.
reactive и refМожно объединять оба подхода:
const form = reactive({
username: '',
password: ''
});
const isSubmitting = ref(false);
reactive удобен для сложных объектов с множеством
свойств.ref удобен для простых флагов или примитивных
значений.При необходимости отслеживания вложенных объектов внутри
reactive, Quasar и Vue автоматически делают вложенные
объекты реактивными, что избавляет от необходимости создавать
ref для каждого поля.
ref.reactive.ref.computed.watch или watchEffect.Эти инструменты позволяют управлять состоянием приложения на уровне компонентов Quasar с максимальной реактивностью и минимальной ручной синхронизацией.