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

Зачем нужно размонтирование в React?

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

Размонтирование — удаление компонента из дерева и DOM — нужно по двум причинам: UI должен отражать актуальное состояние (ушедшее — убрать), и главное — это момент освобождения ресурсов.

Когда происходит

  • Условный рендеринг: {isOpen && <Modal />} — isOpen стал false;
  • навигация: смена маршрута размонтирует старую страницу;
  • удаление элемента списка;
  • смена key или типа элемента (пересоздание).

Зачем это критично: очистка ресурсов

Компонент за время жизни обрастает «хвостами»: таймеры, подписки, соединения, глобальные слушатели. Без очистки при размонтировании они продолжают жить:

  • утечки памяти (замыкания держат объекты);
  • «зомби»-обработчики дёргают setState несуществующего компонента (лишняя работа, гонки);
  • накапливающиеся дубли: смонтировали чат три раза — три WebSocket-соединения.
useEffect(() => {
  const socket = connect(roomId);
  const timer = setInterval(ping, 30000);

  return () => {        // выполняется при размонтировании
    socket.close();
    clearInterval(timer);
  };
}, [roomId]);

В классах то же — componentWillUnmount.

Ещё роль: сброс состояния

Размонтирование уничтожает state компонента. Это используется намеренно: смена key (<Form key={userId} />) пересоздаёт компонент с чистым состоянием — декларативный способ «сбросить всё».

Проверка корректности

StrictMode (dev) монтирует компоненты дважды (mount → unmount → mount) именно чтобы выявить эффекты без честной очистки.

Коротко для собеседования

Размонтирование убирает неактуальный UI и — главное — освобождает ресурсы: cleanup-функции эффектов (componentWillUnmount в классах) закрывают таймеры, подписки, соединения; иначе утечки и «зомби»-обработчики. Побочная роль — сброс state, в том числе намеренный через смену key.

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