Изменится ли переменная из UseState при перерендеринге?
Хуки
При перерендеринге вызов useState вернёт актуальное значение из хранилища React — но внутри одного рендера переменная никогда не меняется: это константа-«снимок».
Две точки зрения
Между рендерами — да, «изменится». React хранит состояние на fiber-узле; каждый новый вызов компонента получает свежее значение:
const Counter = () => {
const [count, setCount] = useState(0);
// 1-й рендер: count === 0
// после setCount(1) и ререндера: count === 1 (новая переменная нового вызова)
};Инициализатор useState(0) при повторных рендерах игнорируется — возвращается сохранённое значение, а не 0.
Внутри одного рендера — нет, не изменится. count — обычная const в замыкании данного вызова функции:
const handleClick = () => {
setCount(count + 1);
console.log(count); // старое значение! переменная не мутируется
setCount(count + 1); // видит тот же старый count → итог +1, не +2
};Правильно для серий обновлений — функциональная форма: setCount((c) => c + 1).
Модель «снимков»
Каждый рендер — это отдельный вызов функции со своими props, state и замыканиями. Обработчики и эффекты, созданные в этом рендере, «фотографируют» его значения. setState не мутирует переменную — он просит React выполнить новый рендер, в котором useState вернёт новое значение.
Коротко для собеседования
Да — при следующем рендере useState вернёт обновлённое значение (инициализатор игнорируется). Но внутри текущего рендера переменная — неизменяемый снимок: после setState она не меняется, поэтому серии обновлений делают через функциональную форму сеттера. Каждый рендер — свой набор значений и замыканий.