PassFront
  1. PassFront
  2. База знаний
  3. Жизненный цикл

Какая функция срабатывает при размонтировании компонента?

Жизненный цикл

При размонтировании функционального компонента срабатывают 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 проверяет его корректность двойным монтированием.

Другие вопросы раздела