> Что означает ошибка too many renders в React и как её исправить (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Иннотех

Стек: React

> Пример ответа

Ошибка "too many renders" в React возникает, когда компонент бесконечно вызывает повторный рендер, попадая в цикл. Это происходит из-за того, что в процессе рендера (например, в теле функционального компонента или в render() методе классового) вызывается функция, которая обновляет состояние (setState или useState), что немедленно запускает новый рендер, и так до бесконечности.

Пример проблемы:

JSX
function Counter() {
const [count, setCount] = useState(0);
setCount(count + 1); // ❌ Вызов внутри рендера - бесконечный цикл
return <div>{count}</div>;
}

Как исправить:

  1. Перенесите обновление состояния в обработчик события или эффект.
    Вместо прямого вызова setState в теле компонента используйте useEffect с зависимостями или обработчик (например, onClick).

    JSX
    function Counter() {
    const [count, setCount] = useState(0);
    return <button onClick={() => setCount(count + 1)}>+</button>;
    }
  2. Проверьте условные вызовы.
    Если обновление состояния происходит внутри условного блока, убедитесь, что условие не выполняется на каждом рендере (например, из-за неправильного сравнения объектов или массивов).

  3. Используйте useCallback для стабильных ссылок на функции.
    Если вы передаёте колбэк, который обновляет состояние, в дочерний компонент, оберните его в useCallback, чтобы избежать повторного создания функции и лишних рендеров.

  4. Проверьте useEffect с зависимостями.
    Если вы обновляете состояние внутри useEffect, убедитесь, что зависимости корректны и не вызывают бесконечный цикл (например, не включайте в массив зависимостей сам обновляемый стейт без необходимости).

Ключевое правило: никогда не вызывайте setState или dispatch непосредственно в теле компонента - только в обработчиках событий, useEffect или колбэках, которые не выполняются синхронно во время рендера.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью