> Как работает состояние счетчика при ререндере в React? (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Альфа-банк
Стек: React
> Пример ответа
В React состояние счетчика (и любого другого состояния, заданного через useState) при ререндере работает следующим образом:
-
Инициализация: При первом рендере компонента
useState(initialValue)создает ячейку состояния в виртуальном DOM (точнее, в «волокне» - fiber). Начальное значение вычисляется один раз. -
Обновление: При вызове функции-сеттера (например,
setCount(count + 1)) React помечает компонент как «грязный» и планирует ререндер. Само значение состояния не меняется мгновенно - оно сохраняется в замыкании текущего рендера. -
Ререндер: При следующем рендере React снова вызывает функцию компонента.
useStateвозвращает актуальное значение из своего внутреннего хранилища (не из переменной, объявленной в прошлом рендере). Это значение - то, которое было установлено последним вызовом сеттера до начала этого рендера. -
Изоляция рендеров: Каждый рендер имеет свою «версию» состояния. Если вы зафиксировали значение в замыкании (например, в
setTimeout), оно будет ссылаться на значение на момент того рендера, когда замыкание было создано. Это называется «замыканием в React» и может приводить к «stale closure» (устаревшему замыканию), если не использовать функциональную форму сеттера:setCount(prev => prev + 1).
Пример:
JSXfunction Counter() {const [count, setCount] = useState(0);// При каждом ререндере count - это актуальное значение из хранилища Reactreturn <button onClick={() => setCount(count + 1)}>{count}</button>;}
Если нажать кнопку три раза, произойдет три ререндера, и на каждом count будет увеличиваться на 1, начиная с предыдущего значения.
> Похожие задачи по frontend
Что происходит при быстром вводе нескольких символов в input в React
Почему при кликах на кнопку может происходить рассинхронизация цвета текста и фона в React
Как работает обновление состояния при нескольких вызовах setState в React?
Нужно ли использовать useEffect для подписки на изменения неконтролируемого input с ref в React?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью