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

Какие компоненты жизненного цикла нужны в типичном решении и за что они отвечают?

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

Речь о том, какие этапы (методы) жизненного цикла реально нужны в типичном компоненте и за что каждый отвечает.

В функциональных компонентах (стандарт)

Всё выражается через useEffect и родственников:

  • Монтирование — useEffect(fn, []): инициализация, разовая загрузка, установка глобальных слушателей, аналитика.
  • Обновление по данным — useEffect(fn, [deps]): перезапрос при смене id, переподключение к каналу.
  • Размонтирование — cleanup-функция эффекта: отписки, clearInterval, close, abort.
  • До отрисовки кадра — useLayoutEffect: измерения DOM и синхронная правка (позиционирование, скролл) без мигания.
  • Ленивая инициализация — useState(() => ...) / useRef: значение до первого рендера, один раз.
useEffect(() => {
  const conn = connect(roomId); // mount + update по roomId
  return () => conn.close();    // unmount + перед перезапуском
}, [roomId]);

В классовых (легаси)

  • componentDidMount — инициализация после вставки в DOM.
  • componentDidUpdate(prevProps) — реакция на изменения (со сравнением prevProps, иначе цикл).
  • componentWillUnmount — очистка ресурсов.
  • shouldComponentUpdate / PureComponent — пропуск лишних рендеров (аналог React.memo).
  • getDerivedStateFromError / componentDidCatch — Error Boundary (без хук-аналогов).
  • Редко: getSnapshotBeforeUpdate (снять позицию скролла до коммита).

Правильная модель

С хуками мыслят не «этапами жизни», а синхронизацией: эффект описывает связь компонента с внешней системой, React сам решает, когда её установить, переустановить и разорвать.

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

Нужны три момента: монтирование (инициализация — useEffect(fn, []) / componentDidMount), обновление по данным (useEffect(fn, [deps]) / componentDidUpdate с проверкой prevProps) и размонтирование (cleanup / componentWillUnmount). Плюс useLayoutEffect для измерений до отрисовки и Error Boundary в классах.

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