[英]How to set 2 states asynchronously in React using useState
我有這個 function:
const [numbers, setNumbers] = useState([]);
const [rows, setRows] = useState([]);
const addRow = () => {
setNumbers([...numbers, numbers.length+1]);
setRows([...rows,
<NewGradeRow key={numbers[numbers.length-1]} number={numbers[numbers.length-1]}/>]);
}
那應該添加新行。 它應該向數字掛鈎添加一個新值,然后使用數字掛鈎中的新值在行掛鈎中添加新行。 它同步運行,但新行不使用賦予數字掛鈎的新值。 我將如何解決這個問題?
從執行的計算中獲取新值(一加原始numbers
的長度),而不是從numbers
變量(尚未更新)中獲取:
const addRow = () => {
const newNum = numbers.length + 1;
setNumbers([...numbers, newNum]);
setRows([...rows,
<NewGradeRow
key={newNum}
number={newNum}
/>
]);
};
您還可以使用useEffect
來觀察numbers
的變化。 從addRow
中刪除setRows
,然后執行:
useEffect(() => {
const newNum = numbers[numbers.length - 1];
setRows([...rows,
<NewGradeRow
key={newNum}
number={newNum}
/>
]);
}, numbers.length);
(如果numbers
的長度也可以從其他來源改變,你必須將其納入邏輯)
“NewGradeRow”是一個 jsx 組件嗎?? 如果是這樣,我懷疑它是否可以在 setRows state 中調用或聲明它應該與 setRows state 分開並放入返回語句中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.