Что такое lifecycle hooks (например, mounted)?
Lifecycle hooks (хуки жизненного цикла) — это специальные методы, которые Vue вызывает автоматически на разных этапах жизненного цикла компонента. С помощью этих хуков ты можешь выполнить код до или после определённых событий, например, до того как компонент отрендерится, после монтирования в DOM, перед уничтожением и т.д. Это позволяет более точно контролировать поведение компонентов в зависимости от их состояния и жизненного цикла.
Жизненный цикл компонента Vue
Компонент Vue проходит через несколько этапов:
- **Создание (Initialization)
** - **Монтаж (Mounting)
** - **Обновление (Updating)
** - **Удаление (Unmounting)
**
На каждом из этих этапов вызываются определённые хуки.
Основные хуки жизненного цикла
1. beforeCreate()
-
Вызывается до инициализации data, props, computed и methods.
-
Здесь ты ещё не можешь обращаться к this.data или this.methods.
beforeCreate() {
console.log('Компонент создаётся. Данные ещё недоступны');
}
2. created()
-
Вызывается сразу после инициализации data, props, methods, computed, watch.
-
Здесь можно уже обращаться к this, запускать запросы, подписки и т.д.
-
Компонент ещё не вставлен в DOM.
created() {
console.log('Доступ к данным есть:', this.someData);
}
3. beforeMount()
-
Вызывается перед монтированием шаблона в DOM.
-
this.$el ещё не привязан к реальному DOM-элементу.
-
Это последний момент перед вставкой шаблона.
beforeMount() {
console.log('Компонент скоро будет вставлен в DOM');
}
4. mounted()
-
Вызывается после того как компонент вставлен в DOM.
-
Здесь this.$el ссылается на реальный DOM-элемент.
-
Идеальное место для инициализации сторонних библиотек, таймеров, манипуляций с DOM.
mounted() {
console.log('Компонент в DOM. Можно использовать this.$el');
}
5. beforeUpdate()
-
Вызывается перед повторным рендерингом (когда data, props или computed изменились).
-
Но DOM ещё не обновлён.
-
Подходит для сохранения состояния перед обновлением.
beforeUpdate() {
console.log('Что-то изменилось. DOM пока старый.');
}
6. updated()
-
Вызывается после того как DOM обновился.
-
Можно реагировать на изменения и, например, производить расчёты или измерения.
updated() {
console.log('Компонент обновился. DOM уже новый.');
}
7. beforeUnmount() (в Vue 3) / beforeDestroy() (в Vue 2)
-
Вызывается перед уничтожением компонента.
-
Можно остановить таймеры, отписаться от подписок, освободить ресурсы.
beforeUnmount() {
console.log('Компонент вот-вот будет удалён.');
}
8. unmounted() (в Vue 3) / destroyed() (в Vue 2)
-
Компонент удалён из DOM.
-
Это финальный хук.
unmounted() {
console.log('Компонент уничтожен и удалён из DOM.');
}
Пример использования всех хуков
export default {
data() {
return {
count: 0
}
},
beforeCreate() {
console.log('beforeCreate');
},
created() {
console.log('created');
},
beforeMount() {
console.log('beforeMount');
},
mounted() {
console.log('mounted');
this.timer = setInterval(() => this.count++, 1000);
},
beforeUpdate() {
console.log('beforeUpdate');
},
updated() {
console.log('updated');
},
beforeUnmount() {
console.log('beforeUnmount');
clearInterval(this.timer);
},
unmounted() {
console.log('unmounted');
}
}
Где полезно использовать хуки
-
created() — загрузка данных с сервера, инициализация состояния.
-
mounted() — инициализация библиотек (например, chart.js, swiper.js), прямые DOM-манипуляции.
-
beforeUpdate() — сравнение предыдущего и нового состояния перед ререндером.
-
updated() — обновление внешнего плагина после изменения DOM.
-
beforeUnmount() / unmounted() — очистка ресурсов (например, отписка от WebSocket, остановка таймеров, удаление обработчиков событий).
Хуки в Options API vs Composition API
В Options API хуки — это методы в объекте компонента (как в примерах выше).
В Composition API используются функции из vue, например onMounted, onUnmounted:
import { onMounted, onUnmounted } from 'vue';
export default {
setup() {
onMounted(() => {
console.log('Компонент смонтирован');
});
onUnmounted(() => {
console.log('Компонент будет удалён');
});
}
}
Очередность вызова хуков
beforeCreate → created → beforeMount → mounted →
[обновления: beforeUpdate → updated] →
beforeUnmount → unmounted
Хуки жизненного цикла — это мощный инструмент, который позволяет управлять компонентами в нужные моменты, обеспечивая точный контроль над их поведением, временем жизни, ресурсами и взаимодействием с внешним окружением.