Javascript 为什么在setCnt中不更新useState?

Javascript 为什么在setCnt中不更新useState?,javascript,html,reactjs,react-hooks,Javascript,Html,Reactjs,React Hooks,我想做一个循环,并在evry循环之后添加到cnt 1(这是我尝试做的一个简短示例,所以它必须像这样,而不是第一次添加3)。但是因为setCnt是异步的,所以它只为所有循环添加一个,而不是3。 任何idia如何使其添加每个循环3同步 const [cnt, setCnt] = useState(0) const updateState = () => { for (var i = 1; i<3; i++){ setCnt(cnt + 1) } } useEffect((

我想做一个循环,并在evry循环之后添加到cnt 1(这是我尝试做的一个简短示例,所以它必须像这样,而不是第一次添加3)。但是因为setCnt是异步的,所以它只为所有循环添加一个,而不是3。 任何idia如何使其添加每个循环3同步

const [cnt, setCnt] = useState(0)

const updateState = () => {
  for (var i = 1; i<3; i++){
  setCnt(cnt + 1)
  }
}

useEffect(() => {
  console.log('new state', cnt)
}, [cnt])

return (
  <div>
    <button onClick={updateState}>Change state</button>
  </div>
)
}
const[cnt,setCnt]=useState(0)
const updateState=()=>{
对于(var i=1;i{
console.log('newstate',cnt)
},[cnt])
返回(
改变状态
)
}

谢谢

,因为
setScore
函数是异步的,您无法在设置状态后立即获得更新的状态。 你需要让它发挥效用

useEffect(() => {
  console.log(score)
}, [score])

好的,所以如果您想在设置状态时使用前一个状态值(在本例中,前一个值+1),您需要向set state调用传递一个函数。该函数的参数是前一个状态值。因此,这应该满足您的需求:

import React, { useState } from "react";

export default function App() {
  const [count, setCount] = useState(0);

  const updateCount = () => {
    for (let i = 0; i < 3; i++) {
      // Pass a function here
      setCount(prevCount => prevCount + 1);
    }
  };

  return (
    <div>
      <h1>Count:</h1>
      <div>{count}</div>
      <button onClick={updateCount}>Add 3 to count</button>
    </div>
  );
}
import React,{useState}来自“React”;
导出默认函数App(){
const[count,setCount]=useState(0);
常量updateCount=()=>{
for(设i=0;i<3;i++){
//在这里传递一个函数
setCount(prevCount=>prevCount+1);
}
};
返回(
计数:
{count}
数到3
);
}

在问题中添加相关代码。另外,看起来您在更改状态后直接在行上打印状态,这将不起作用。状态更改是异步的哦,谢谢,你知道如何解决它吗?解决什么?威廉在下面的回答显示了如何正确打印,您是否有其他问题?我们需要更好地描述您的具体问题和相关代码谢谢!,但我在哪里更新分数?(我应该写什么来代替setScore)无需更新,您可以正确地调用
setScore
,只需查看useEffect中的结果就可以了。为了清楚起见,我是否应该添加useEffect(()=>{console.log(score)},[score]),并且它应该工作(打印setScore的最后一次更新)?参考此。