> Что означает ошибка too many renders в React и как её исправить (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех
Стек: React
> Пример ответа
Ошибка "too many renders" в React возникает, когда компонент бесконечно вызывает повторный рендер, попадая в цикл. Это происходит из-за того, что в процессе рендера (например, в теле функционального компонента или в render() методе классового) вызывается функция, которая обновляет состояние (setState или useState), что немедленно запускает новый рендер, и так до бесконечности.
Пример проблемы:
JSXfunction Counter() {const [count, setCount] = useState(0);setCount(count + 1); // ❌ Вызов внутри рендера - бесконечный циклreturn <div>{count}</div>;}
Как исправить:
-
Перенесите обновление состояния в обработчик события или эффект.
Вместо прямого вызоваsetStateв теле компонента используйтеuseEffectс зависимостями или обработчик (например,onClick).JSXfunction Counter() {const [count, setCount] = useState(0);return <button onClick={() => setCount(count + 1)}>+</button>;} -
Проверьте условные вызовы.
Если обновление состояния происходит внутри условного блока, убедитесь, что условие не выполняется на каждом рендере (например, из-за неправильного сравнения объектов или массивов). -
Используйте
useCallbackдля стабильных ссылок на функции.
Если вы передаёте колбэк, который обновляет состояние, в дочерний компонент, оберните его вuseCallback, чтобы избежать повторного создания функции и лишних рендеров. -
Проверьте
useEffectс зависимостями.
Если вы обновляете состояние внутриuseEffect, убедитесь, что зависимости корректны и не вызывают бесконечный цикл (например, не включайте в массив зависимостей сам обновляемый стейт без необходимости).
Ключевое правило: никогда не вызывайте setState или dispatch непосредственно в теле компонента - только в обработчиках событий, useEffect или колбэках, которые не выполняются синхронно во время рендера.
> Похожие задачи по frontend
Откуда приходят данные при серверной генерации в Next.js
Нужно ли мутировать массив товаров или создавать его копию для обновления состояния в React?
Можно ли создать два интерфейса или типа с одинаковым именем, но разным описанием в TypeScript
Какой опыт работы с NestJS
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью