Какая функция срабатывает при размонтировании компонента?
Жизненный цикл
При размонтировании функционального компонента срабатывают cleanup-функции его эффектов — те, что были возвращены из useEffect/useLayoutEffect. В классах — метод componentWillUnmount.
Функциональные компоненты
const Ticker = () => {
useEffect(() => {
const id = setInterval(tick, 1000);
return () => clearInterval(id); // ← вызовется при размонтировании
}, []);
return <span>...</span>;
};Отдельного «хука размонтирования» нет: React вызывает cleanup каждого активного эффекта. Порядок: при размонтировании cleanup'ы выполняются сверху вниз (сначала у родителя, потом у детей, как и componentWillUnmount); сначала layout-эффекты, потом пассивные.
Cleanup вызывается при размонтировании и ещё перед каждым перезапуском эффекта при изменении зависимостей.
Классовые компоненты
componentWillUnmount() {
this.socket.close();
clearInterval(this.timer);
}Вызывается один раз перед удалением из DOM.
Что делать при размонтировании
- Снять слушатели (removeEventListener), закрыть соединения (WebSocket).
- Очистить таймеры.
- Отменить запросы (AbortController) или выставить флаг отмены, чтобы не делать setState после размонтирования.
Нюанс StrictMode
В dev-режиме React 18 монтирует компонент дважды (mount → unmount → mount), чтобы проверить, что cleanup написан честно: забытая очистка проявится сразу.
Коротко для собеседования
В функциональных компонентах при размонтировании выполняются cleanup-функции эффектов (возврат из useEffect/useLayoutEffect), сверху вниз по дереву (от родителя к детям); в классах — componentWillUnmount. Cleanup также вызывается перед каждым перезапуском эффекта, а StrictMode проверяет его корректность двойным монтированием.