Встречается на собеседованиях • сегодня

Почему может не сработать callback в useEffect

Если колбэк в useEffect не срабатывает, возможные причины:

  1. Зависимости не указаны или указаны неправильно
    Если массив зависимостей пуст ([]), эффект запустится только при монтировании. Если зависимости не обновляются, эффект не перезапустится.

    jsx
    useEffect(() => {
      console.log('Effect runs only once');
    }, []); // Пустой массив зависимостей
  2. Ссылочная идентичность зависимостей
    Примитивы сравниваются по значению, объекты/массивы/функции — по ссылке. Если зависимость — объект, созданный внутри компонента, эффект будет перезапускаться на каждом рендере.

jsx
const obj = { id: 1 }; // Новый объект при каждом рендере
useEffect(() => {
  console.log('Effect runs every render');
}, [obj]); // obj меняет ссылку
  1. Условия внутри эффекта
    Если колбэк содержит условия (например, проверку состояния), эффект может не выполниться, если условие ложно.

    jsx
    useEffect(() => {
      if (someCondition) { // Если someCondition === false, код не выполнится
        fetchData();
      }
    }, [someCondition]);
  2. Очистка эффекта (cleanup)
    Если эффект возвращает функцию очистки, она выполняется перед следующим запуском эффекта или при размонтировании. Это может прервать выполнение асинхронного кода.

    jsx
    useEffect(() => {
      const timer = setTimeout(() => {
        console.log('Delayed effect');
      }, 1000);
      return () => clearTimeout(timer); // Таймер очищается до срабатывания
    }, []);
  3. Строгий режим React (StrictMode)
    В режиме разработки React может дважды монтировать компонент, что приводит к двойному вызову эффекта. Это может скрывать логику, зависящую от однократного выполнения.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы