React 中的多个状态不会更新依赖于其他状态
Multiple States in React doesn't update which are dependent on other state
当状态 A 的值满足条件但状态 B 没有改变时,我正在尝试更新状态 B。
如果下面的代码是运行每当A达到100时B的值应该增加+1,但是当显示时B的值保持固定为0
这是我正在尝试做的伪代码
从“react”导入 React,{useState};
export default function Test() {
const [A , setA] = useState(0);
const [B, setB] = useState(0);
const handleStart = () => {
setInterval( () => {
setA(prev => prev + 1)
if( A === 100){
setB(prev => prev +1)
A = 0
}
},10)
}
return (
<div>
<h1>{A}</h1>
<h1>{B}</h1>
<button onClick = {() => {handleStart()}}> START </button>
</div>
);
}
setA()
方法是异步更新值的异步方法,因此当 React 创建一批这些异步任务时,setA 之前的 if
条件可能会首先触发。您需要将逻辑移动到 SetA()
中才能使其正常工作。
代码-
const handleStart = () => {
setInterval(() => {
setA((prev) => {
if (prev === 100) {
setB((prevB) => prevB + 1);
return 0;
}
return prev + 1;
});
}, 10);
};
工作示例 - codesandbox Link
当状态 A 的值满足条件但状态 B 没有改变时,我正在尝试更新状态 B。
如果下面的代码是运行每当A达到100时B的值应该增加+1,但是当显示时B的值保持固定为0
这是我正在尝试做的伪代码
从“react”导入 React,{useState};
export default function Test() {
const [A , setA] = useState(0);
const [B, setB] = useState(0);
const handleStart = () => {
setInterval( () => {
setA(prev => prev + 1)
if( A === 100){
setB(prev => prev +1)
A = 0
}
},10)
}
return (
<div>
<h1>{A}</h1>
<h1>{B}</h1>
<button onClick = {() => {handleStart()}}> START </button>
</div>
);
}
setA()
方法是异步更新值的异步方法,因此当 React 创建一批这些异步任务时,setA 之前的 if
条件可能会首先触发。您需要将逻辑移动到 SetA()
中才能使其正常工作。
代码-
const handleStart = () => {
setInterval(() => {
setA((prev) => {
if (prev === 100) {
setB((prevB) => prevB + 1);
return 0;
}
return prev + 1;
});
}, 10);
};
工作示例 - codesandbox Link