Реализация пользовательского хука useFirstRender

Для показанного компонента нужен флаг готовности после первого commit: сначала false, затем true из useEffect. По нему можно отложить отображение children до следующего рендера.

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

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

Для показанного компонента нужен флаг готовности после первого commit: сначала false, затем true из useEffect. По нему можно отложить отображение children до следующего рендера.

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

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

Условие

Необходимо написать кастомный хук useFirstRender, который будет срабатывать сразу после первой отрисовки компонента.

 import RenderAfterFirstRender from "./book";

export default function App() {
    return (
    <div className="App">
    <p>реализовать хук userfirstRender</p>
    <RenderAfterFirstRender>
       контент после первого рендера
    </RenderAfterFirstRender>
    </div>
);
}

Ответ

Для показанного компонента нужен флаг готовности после первого commit: сначала false, затем true из useEffect. По нему можно отложить отображение children до следующего рендера.

import { useEffect, useState } from 'react';
function useFirstRender() {
  const [ready, setReady] = useState(false);
  useEffect(() => { setReady(true); }, []);
  return ready;
}
export default function RenderAfterFirstRender({ children }) {
  return useFirstRender() ? children : null;
}

Здесь контракт хука — «первый commit уже прошёл», а не «сейчас первый вызов функции». Эффект не гарантирует физическую отрисовку пикселей до выполнения. В Strict Mode разработка может повторно проверять эффекты; установка true идемпотентна. Сетевые или необратимые действия в таком хуке требуют отдельной защиты.

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

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

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

Подробнее