Vue.js строит свою реактивность на основе механизма отслеживания зависимостей, который позволяет автоматически обновлять пользовательский интерфейс при изменении данных. Центральной концепцией является реактивная система, связывающая состояние приложения с отображением через наблюдение за изменениями.
Для создания реактивного объекта используется функция
reactive:
import { reactive } from 'vue';
const state = reactive({
count: 0,
user: {
name: 'Алексей',
age: 30
}
});
Ключевые моменты:
state.user.name отследится автоматически.effectЭффекты позволяют выполнять функцию при изменении её зависимостей:
import { effect } from 'vue';
effect(() => {
console.log(`Текущее значение: ${state.count}`);
});
effect Vue регистрирует все
используемые свойства как зависимости.Эффекты могут быть использованы для связывания данных с DOM, вычисляемых значений или побочных эффектов.
Вычисляемые свойства (computed) создаются на основе
реактивных данных и автоматически пересчитываются при изменении
зависимостей:
import { computed } from 'vue';
const doubleCount = computed(() => state.count * 2);
Особенности:
computed для сложной логики позволяет
минимизировать количество эффектов и обновлений DOM.watchФункция watch позволяет отслеживать изменения
конкретного реактивного значения и выполнять побочные действия:
import { watch } from 'vue';
watch(
() => state.user.age,
(newAge, oldAge) => {
console.log(`Возраст изменился с ${oldAge} на ${newAge}`);
}
);
Особенности watch:
Массивы и объекты
push, pop,
splice) отслеживаются.reactive. Для добавления
реактивного свойства используют set (в Vue 2) или создают
новый объект с новым свойством (Vue 3).Декомпозиция реактивного объекта
toRefs
позволяет сохранить реактивные ссылки на отдельные свойства:import { toRefs } from 'vue';
const { count } = toRefs(state);Отслеживание сложных зависимостей
watch для избирательного слежения.Vue строит реактивность на основе геттеров и
сеттеров с использованием Proxy. При чтении
свойства:
При записи:
reactive для объектов и массивов,
ref для примитивов.computed вместо создания эффекта вручную.watch, особенно
при асинхронной логике.Механизм отслеживания зависимостей является сердцем Vue.js и обеспечивает высокую производительность приложения без явного управления обновлениями DOM. Понимание работы реактивности позволяет строить масштабируемые и оптимизированные интерфейсы.