Когда вызывается функция Render в React?
Рендеринг и производительность
Render (функция компонента или метод render класса) вызывается в трёх ситуациях: первичное монтирование, обновление, StrictMode-повтор в dev.
Когда вызывается
Первичный рендер — при монтировании дерева:
createRoot(document.getElementById('root')).render(<App />);Обновления — каждый раз, когда:
- изменился state компонента (сеттер/dispatch с новым значением);
- отрендерился родитель (каскад вниз — без проверки props, если нет React.memo);
- изменился потребляемый контекст;
- сработала подписка на внешний стор (useSelector и т.п.).
Служебные вызовы:
- StrictMode в dev вызывает рендер дважды на каждое обновление — проверка чистоты функции;
- при конкурентном рендеринге (React 18) начатый рендер может быть отброшен и вызван заново, если вклинилось срочное обновление.
Когда НЕ вызывается
- Запись в ref, мутации без сеттера, сеттер с тем же значением (Object.is).
- У React.memo-компонента при поверхностно равных props (если нет своих state/context-триггеров).
Свойства вызова
- Render — чистая функция: без запросов, подписок, мутаций; побочные эффекты — в useEffect (после коммита).
- Вызов render ≠ обновление DOM: дифф может не найти отличий.
- Частота вызовов render — нормальная ситуация; проблемой становится, когда рендеры дорогие или каскад слишком широкий.
Коротко для собеседования
Render вызывается при монтировании и при каждом обновлении: свой state, рендер родителя, контекст, подписки. В dev StrictMode дублирует вызовы, конкурентный рендер может перезапускать их. Функция должна быть чистой, а её вызов не означает изменения DOM.