PassFront
  1. PassFront
  2. База знаний
  3. Хуки

Какие аргументы принимает useEffect?

Хуки

useEffect принимает два аргумента: функцию эффекта (обязательную) и массив зависимостей (необязательный).

Первый аргумент — функция эффекта

useEffect(() => {
  document.title = `Сообщений: ${count}`; // сам эффект

  return () => { document.title = 'App'; }; // необязательный cleanup
}, [count]);
  • Выполняется после коммита рендера (асинхронно относительно отрисовки).
  • Может вернуть cleanup-функцию — она вызовется перед следующим запуском эффекта и при размонтировании.
  • Не может быть async: обязана возвращать функцию или undefined, а async-функция возвращает Promise. Асинхронный код оформляют внутри.

Второй аргумент — массив зависимостей

Управляет тем, когда эффект перезапускается:

  • отсутствует — после каждого рендера;
  • `[]` — один раз, после монтирования;
  • `[a, b]` — после монтирования и при изменении a или b (сравнение каждого элемента через Object.is со значением из прошлого рендера).

Правила для массива зависимостей

  • В него должны попасть все реактивные значения, используемые внутри эффекта (props, state, функции из тела компонента) — за этим следит ESLint-правило exhaustive-deps.
  • Пропущенная зависимость → эффект работает с устаревшими значениями (stale closure).
  • Нестабильная зависимость (инлайн-объект/функция) → эффект перезапускается каждый рендер; лечится useMemo/useCallback или переносом внутрь эффекта.

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

Аргумента два: колбэк эффекта (выполняется после рендера, может вернуть cleanup, не может быть async) и массив зависимостей (нет — каждый рендер, пустой — раз при монтировании, со значениями — при их изменении по Object.is). В массиве обязаны быть все используемые реактивные значения.

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