Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про React: react, strict, mode, useeffect

Почему useEffect может вызываться два раза в React?

Почему useEffect может вызываться два раза в React?

Короткий ответ

В React 18 в режиме разработки useEffect может вызываться два раза из-за StrictMode. Это сделано специально, чтобы выявлять небезопасные побочные эффекты. В продакшене такого поведения нет. Два вызова помогают обнаружить код, который не готов к повторному выполнению.

Длинный ответ

Определение

StrictMode — это режим React, который помогает находить потенциальные ошибки, намеренно вызывая некоторые операции повторно.

Что именно происходит

Перед перечислением важно понимать: это не баг, а диагностическое поведение.

  1. React монтирует компонент

  2. Вызывает useEffect

  3. Вызывает cleanup

  4. Монтирует компонент ещё раз

  5. Снова вызывает useEffect

useEffect(() => {
  console.log("effect");
  return () => {
    console.log("cleanup");
  };
}, []);

В режиме разработки лог будет:

  1. "effect"

  2. "cleanup"

  3. "effect"

Зачем React так делает

  1. Проверяет, корректно ли работает cleanup

  2. Выявляет:

    • неотменённые подписки

    • дублирующиеся запросы

    • небезопасные побочные эффекты

  3. Заставляет писать устойчивый код

Почему это важно для запросов

Если запрос:

  1. Делается без cleanup

  2. Не отменяется

  3. Не защищён от race condition

— вы увидите двойной запрос в dev-режиме.

Как с этим работать

  1. Всегда использовать cleanup

  2. Не полагаться на “однократность” эффекта

  3. Понимать разницу между dev и prod

Вывод

Двойной вызов useEffect в React — это следствие StrictMode. Он помогает находить ошибки в работе с побочными эффектами и делает код надёжнее.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • React

    React

Ключевые слова

#react

#strict

#mode

#useeffect

Подпишись на React Developer в телеграм