> В каком порядке отрабатывают логи и рендер при использовании useEffect и useLayoutEffect с пустым массивом зависимостей в React (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: ПСБ
Стек: React
> Пример ответа
При использовании useEffect с пустым массивом зависимостей ([]) порядок выполнения следующий:
-
Компонент рендерится (вызывается функция компонента, возвращается JSX).
-
React обновляет DOM.
-
Браузер отрисовывает изменения на экране (paint).
-
После этого асинхронно выполняется колбэк
useEffect.
Лог в useEffect появится после того, как пользователь увидит обновленный интерфейс.
С useLayoutEffect с пустым массивом зависимостей порядок иной:
-
Компонент рендерится.
-
React обновляет DOM.
-
Синхронно выполняется колбэк
useLayoutEffect(до того, как браузер отрисует изменения). -
Браузер отрисовывает экран.
Лог в useLayoutEffect появится до того, как пользователь увидит обновление, так как он блокирует отрисовку.
Пример для наглядности:
JSXfunction App() {useEffect(() => console.log('useEffect'));useLayoutEffect(() => console.log('useLayoutEffect'));console.log('render');return null;}// Вывод в консоль: "render" → "useLayoutEffect" → "useEffect"
Ключевое отличие: useLayoutEffect выполняется синхронно после всех DOM-мутаций, но до отрисовки браузером, а useEffect - асинхронно после отрисовки.
> Похожие задачи по frontend
Откуда useLayoutEffect берет информацию о DOM-элементе до рендера в React
Как убрать лишние зависимости в useEffect для избежания лишних рендеров
Знаешь ли про React 19 и изменения в компиляторе, убирающие необходимость использования useCallback и useMemo
Какова стратегия использования React хуков и когда их применять
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью