Порядок вывода console.log в React‑компоненте №62

Без Strict Mode первый commit печатает App, useLayoutEffect, useEffect 1, useEffect 2. Эффект с инкрементом затем вызывает ещё один рендер и перезапуск зависимых эффектов.

Короткий ответ

Что ответить на собеседовании

Без Strict Mode первый commit печатает App, useLayoutEffect, useEffect 1, useEffect 2. Эффект с инкрементом затем вызывает ещё один рендер и перезапуск зависимых эффектов.

Подробный разбор

Ответ с пояснениями

Условие

Определите, в какой последовательности появятся сообщения в консоли при первом рендере компонента, учитывая работу хуков useEffect, useLayoutEffect и их функций очистки.

import { useEffect, useLayoutEffect, useState } from 'react';

export function App() {
    console.log('App');
    const [counter, setCounter] = useState(0);

    useEffect(() => {
        setCounter(prev => prev + 1);
    }, []);

    useEffect(() => {
        console.log('useEffect 1');
        return () => {
            console.log('useEffect 1, cleanup');
        };
    }, [counter]);

    useEffect(() => {
        console.log('useEffect 2');
        return () => {
            console.log('useEffect 2 cleanup');
        };
    }, [counter]);

    useLayoutEffect(() => {
        console.log('useLayoutEffect');
        return () => {
            console.log('useLayoutEffect cleanup');
        };
    }, [counter]);

    return null;
}

Ответ

Без Strict Mode первый commit печатает App, useLayoutEffect, useEffect 1, useEffect 2. Эффект с инкрементом затем вызывает ещё один рендер и перезапуск зависимых эффектов.

Полная обычная последовательность после начального commit: App → useLayoutEffect cleanup → useLayoutEffect → useEffect 1, cleanup → useEffect 2 cleanup → useEffect 1 → useEffect 2. Очищается эффект с прежним counter, затем создаётся с новым. Dev Strict Mode добавляет пробные рендеры и цикл setup/cleanup, поэтому без указания режима нельзя гарантировать одинаковое количество сообщений.

Источник: react.dev.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее