При вызове setA
вы фактически обновляете переменную состояния и запускаете повторную визуализацию вашего компонента.
При повторной визуализации компонента он вызывает setA
(непосредственно перед визуализацией) и снова запускает повторную визуализацию.
Можете ли вы увидеть бесконечное l oop?
Традиционно вы обновляете переменную состояния в обратный вызов (т. Е. Когда пользователь нажимает на кнопку) или при определенных условиях.
В вашем примере вы можете напрямую установить a
на 2
function App() {
const [a, setA] = useState(2)
return (
<div>
<h1>{a}</h1>
</div>
);
}
Если вы хотите получить первый рендер с a = 1
, то сразу же получите a = 2
, вы можете использовать эффект, который будет выполнен только один раз (из-за пустого массива для второго аргумента)
function App() {
const [a, setA] = useState(2)
useEffect(() => setA(2), [])
return (
<div>
<h1>{a}</h1>
</div>
);
}