Вопрос проверяет понимание жизненного цикла React-компонента и принципа “чистого рендера”.
Тело компонента в React может вызываться много раз, поэтому размещение запроса внутри него приводит к повторным запросам при каждом ререндере. Это нарушает принцип чистоты рендера и может вызвать бесконечные циклы. Запросы относятся к побочным эффектам, а не к вычислению UI. Поэтому их нужно выносить в специальные механизмы для эффектов.
Рендер компонента — это процесс вычисления JSX на основе props и state, который должен быть чистым и предсказуемым.
Сначала опишем проблему словами.
Компонент рендерится
Выполняется запрос
При изменении state происходит новый рендер
Запрос выполняется снова
function User() {
fetch("/api/user"); // ❌ плохо
return <div>User</div>;
}
Дублирующиеся запросы
Бесконечные циклы рендера
Сложность контроля жизненного цикла
Непредсказуемое поведение
JavaScript технически позволяет выполнять любой код
Ответственность за чистоту рендера лежит на разработчике
React даёт инструменты (useEffect) для правильной работы с побочными эффектами
Любой код с побочными эффектами (запросы, подписки, таймеры) не должен находиться в теле компонента.
Запросы нельзя делать в теле компонента, потому что рендер должен быть чистым. Для побочных эффектов в React существует отдельный механизм.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию