Проверяет понимание разницы между состоянием и рефом в React и умение выбирать подходящий инструмент для отслеживания первого рендера без лишних перерисовок.
В React есть два основных способа хранить значения между рендерами: useState и useRef. Они похожи по идее, но принципиально различаются по влиянию на жизненный цикл компонента. useState при изменении запускает повторный рендер, а useRef просто хранит мутируемое значение в объекте { current: ... } и не вызывает перерисовку.
Флаг первого рендера — это служебная метка, которая нужна только внутри логики компонента. Она не влияет на то, что видит пользователь, поэтому нет смысла перерисовывать UI из-за её изменения. Если положить такой флаг в useState, то после первого рендера вызов setState спровоцирует лишний рендер, что может привести к неожиданным эффектам, особенно внутри useEffect.
import { useEffect, useRef, useState } from 'react';
function Example() {
const isFirstRender = useRef(true);
useEffect(() => {
if (isFirstRender.current) {
isFirstRender.current = false;
return; // пропускаем логику на первом рендере
}
console.log('Это уже не первый рендер');
});
return <div>Пример</div>;
}
Если значение флага должно влиять на разметку или на другие вычисления, которые обязаны отразиться в UI, тогда без useState не обойтись. Например, если до первого рендера нужно показать скелетон, а после — реальные данные, и это состояние должно быть видно в JSX.
const [isFirstRender, setIsFirstRender] = useState(true);
useEffect(() => {
setIsFirstRender(false);
}, []);
return isFirstRender ? <Skeleton /> : <Content />;
AbortController для отмены.Итог: для служебного флага первого рендера выбирайте useRef — это избавляет от лишних перерисовок и делает логику предсказуемой. useState берите только тогда, когда значение действительно должно отражаться в интерфейсе.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию