useState предоставляет компоненту-функции локальное, реактивное состояние. Он возвращает пару: текущее значение и функцию setter. Вызов setter планирует переренdering с новым значением.
[count, setCount] = ();
(count + );
( c + );
useState предоставляет компоненту-функции локальное, реактивное состояние. Он возвращает пару: текущее значение и функцию setter. Вызов setter планирует переренdering с новым значением.
[count, setCount] = ();
(count + );
( c + );
Библиотека вопросов для IT-собеседований с подробными ответами — от Junior до Senior.
Поддержать1. Обновления являются асинхронными / пакетными. count не изменяется в строке после setCount; она имеет новое значение при следующей переренdering. Поэтому это увеличивает только один раз:
setCount(count + 1);
setCount(count + 1); // both read the SAME stale `count` → +1 total
Используйте functional updater, когда следующее значение зависит от предыдущего, потому что React передает последнее значение:
setCount(c => c + 1);
setCount(c => c + 1); // +2 total — each gets the up-to-date value
2. Начальное значение используется только при первой переренdering. Для дорогостоящего значения по умолчанию передайте функцию, чтобы она выполнялась один раз (ленивая инициализация):
const [data] = useState(() => expensiveInit()); // runs once, not every render
Состояние — это то, что делает компонент интерактивным — React повторно выполняет функцию и перепрображает пользовательский интерфейс при каждом изменении состояния.
Обращайтесь с состоянием как с неизменяемым: создавайте новый массив/объект вместо мутирования, например setItems([...items, x]), иначе React может не обнаружить изменение.