Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在'中有多个状态;t更新,这些更新依赖于其他状态_Javascript_Reactjs_React Hooks_React State - Fatal编程技术网

Javascript 在'中有多个状态;t更新,这些更新依赖于其他状态

Javascript 在'中有多个状态;t更新,这些更新依赖于其他状态,javascript,reactjs,react-hooks,react-state,Javascript,Reactjs,React Hooks,React State,当状态A的值满足条件但状态B没有改变时,我试图更新状态B 如果运行以下代码,每当A达到100时,B值应增加+1,但显示时,B值保持固定为0 这里是我试图做的伪代码 从“React”导入React,{useState} 导出默认功能测试(){ 常数[A,setA]=useState(0); const[B,setB]=useState(0); 常量handleStart=()=>{ 设置间隔(()=>{ setA(prev=>prev+1) 如果(A==100){ 挫折(上一次=>上一次+1) A

当状态A的值满足条件但状态B没有改变时,我试图更新状态B

如果运行以下代码,每当A达到100时,B值应增加+1,但显示时,B值保持固定为0

这里是我试图做的伪代码

从“React”导入React,{useState}

导出默认功能测试(){
常数[A,setA]=useState(0);
const[B,setB]=useState(0);
常量handleStart=()=>{
设置间隔(()=>{
setA(prev=>prev+1)
如果(A==100){
挫折(上一次=>上一次+1)
A=0
}
},10)
}
返回(
{A}
{B}
{handleStart()}}>开始
);
}
setA()
方法是一种异步更新值的异步方法,因此当React创建一批异步任务时,setA之前的
if
条件可能会首先触发。您需要将逻辑移到
SetA()
中才能使其工作

代码-

  const handleStart = () => {
    setInterval(() => {
      setA((prev) => {
        if (prev === 100) {
          setB((prevB) => prevB + 1);
          return 0;
        }
        return prev + 1;
      });
    }, 10);
  };
工作示例-

setA()
方法是一种异步方法,它以异步方式更新值,因此当React创建一批异步任务时,setA之前的
if
条件可能会首先触发。您需要将逻辑移到
SetA()
中才能使其工作

代码-

  const handleStart = () => {
    setInterval(() => {
      setA((prev) => {
        if (prev === 100) {
          setB((prevB) => prevB + 1);
          return 0;
        }
        return prev + 1;
      });
    }, 10);
  };
工作示例-