[英]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.