Жизненный цикл компонента в Vue.js представляет собой набор этапов, через которые проходит компонент с момента создания до уничтожения. Понимание этих этапов позволяет управлять состоянием приложения, выполнять асинхронные операции в нужное время и оптимизировать производительность.
Создание (Creation) На этом этапе компонент инициализируется, но ещё не добавлен в DOM. Основные события:
beforeCreate — выполняется перед инициализацией
реактивных данных и событий. На этом этапе нельзя обращаться к
data или вычисляемым свойствам
(computed).created — данные уже инициализированы, но DOM ещё не
смонтирован. Подходит для запросов к API, установки начальных значений и
подписки на события.Монтирование (Mounting) Этот этап отвечает за добавление компонента в DOM.
beforeMount — вызывается перед рендерингом шаблона.
Можно использовать для подготовки данных, влияющих на начальный
рендер.mounted — компонент уже вставлен в DOM. Доступ к
реальным элементам через ref возможен. Идеально подходит
для интеграции с внешними библиотеками или настройки анимаций.Обновление (Updating) Обновления происходят при изменении реактивных данных.
beforeUpdate — вызывается перед перерисовкой. Можно
использовать для оптимизации рендеринга или логирования изменений.updated — после обновления DOM. Полезно для действий,
зависящих от обновлённого DOM, например, расчёта размеров
элементов.Размонтирование (Unmounting) Когда компонент удаляется из DOM:
beforeUnmount — последний шанс выполнить очистку или
сохранить состояние.unmounted — компонент полностью удалён. Можно
отписываться от событий, очищать таймеры и освобождать ресурсы.Composition API вводит функцию setup(), которая
вызывается до beforeCreate и created. Внутри
setup можно использовать следующие функции-хуки:
onBeforeMount, onMounted,
onBeforeUpdate, onUpdated,
onBeforeUnmount, onUnmounted — полностью
повторяют поведение Options API, но позволяют писать логику
компонентно-модульно.onActivated и onDeactivated — применяются
для компонентов внутри <keep-alive>, активируются при
показе или скрытии компонента без его уничтожения.Пример использования Composition API:
import { ref, onMounted, onUnmounted } from 'vue';
export default {
setup() {
const count = ref(0);
function increment() {
count.value++;
}
onMounted(() => {
console.log('Компонент смонтирован');
document.title = `Счётчик: ${count.value}`;
});
onUnmounted(() => {
console.log('Компонент размонтирован');
});
return { count, increment };
}
};
created или mounted в зависимости от
необходимости доступа к DOM.beforeUpdate
можно проверять, действительно ли необходимо обновление, чтобы уменьшить
нагрузку на виртуальный DOM.beforeUnmount или
unmounted, чтобы избежать утечек памяти.ref и
nextTick: для корректной работы с DOM после
обновления данных рекомендуется вызывать nextTick внутри
хуков updated или mounted.Корректное использование хуков жизненного цикла напрямую влияет на производительность:
mounted и updated — дорогие операции, если
содержат сложные вычисления, поэтому следует минимизировать их
использование.beforeUpdate — хороший инструмент для предотвращения
лишних ререндеров.При подключении сторонних библиотек, взаимодействующих с DOM (например, графики или анимации), хуки жизненного цикла помогают управлять временем инициализации и уничтожения:
mounted гарантирует, что элементы уже
существуют.unmounted предотвращает ошибки при обращении
к несуществующему DOM.<keep-alive>Компоненты внутри <keep-alive> не уничтожаются, а
сохраняются в памяти. Для них доступны специальные хуки:
onActivated — вызывается при активации компонента.onDeactivated — вызывается при его скрытии.Эти хуки позволяют управлять состоянием, кешированием данных и оптимизацией ресурсов.
Жизненный цикл компонентов Vue.js обеспечивает точное управление поведением приложения на всех этапах существования компонентов. Владение этими механизмами критично для создания высокопроизводительных и устойчивых интерфейсов.