Reactjs 第一次单击时不更新状态

Reactjs 第一次单击时不更新状态,reactjs,react-native,state,use-state,Reactjs,React Native,State,Use State,为什么第一次点击时状态没有改变 const [building, setBuilding] = useState(0); { 建筑工程(1); 控制台日志(建筑); }}/> 控制台日志在第一次单击时总是返回“0”,而不是预期的“1”。如何修复此问题?由于状态更新是异步的,您可能会看到通过将building添加到useEffect依赖项来更新状态值,从而在building的值发生更改时触发它 const [building, setBuilding] = useState(0); us

为什么第一次点击时状态没有改变

const [building, setBuilding] = useState(0);
{
建筑工程(1);
控制台日志(建筑);
}}/>

控制台日志在第一次单击时总是返回“0”,而不是预期的“1”。如何修复此问题?

由于状态更新是异步的,您可能会看到通过将building添加到useEffect依赖项来更新状态值,从而在building的值发生更改时触发它

const [building, setBuilding] = useState(0);

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

  return (
    <button
      title="tester"
      onClick={() => {
        setBuilding(1);
      }}
    >
      test
    </button>
  );
const[building,setBuilding]=useState(0);
useffect(()=>{
控制台日志(建筑);
},[建筑];
返回(
{
建筑工程(1);
}}
>
测试
);

由于状态更新是异步的,您可能会看到通过将building添加到useEffect依赖项来更新状态值,从而在building的值发生更改时触发它

const [building, setBuilding] = useState(0);

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

  return (
    <button
      title="tester"
      onClick={() => {
        setBuilding(1);
      }}
    >
      test
    </button>
  );
const[building,setBuilding]=useState(0);
useffect(()=>{
控制台日志(建筑);
},[建筑];
返回(
{
建筑工程(1);
}}
>
测试
);

状态更新是异步的。正如Dave Newton所说,状态更新不会立即反映在on Press功能中。如果您还想在UseEffect中查看状态更新控制台日志,请参阅,,。这回答了问题,谢谢。一个人通常是结束问题还是把问题留给其他人?我觉得我的问题比它显示给我的链接更容易理解。状态更新是异步的。正如Dave Newton所说,状态更新不会立即反映在on Press功能中。如果您还想在UseEffect中查看状态更新控制台日志,请参阅,,。这回答了问题,谢谢。一个人通常是结束问题还是把问题留给其他人?我觉得我的问题比它显示给我的链接更容易理解。我明白了。然后从技术上讲,我需要在useEffect中设置Building(1)以“实际”更改它。是这样吗?我之所以这么问,是因为我们的目标是在第一次单击时就对其进行更改,而不仅仅是看到控制台日志的更改。取决于我把它放在哪里。您的解决方案是否会在第一次单击时更改建筑?否,单击处理程序会更新状态。它在按下功能中不可用的唯一原因是设置状态是异步的。如果您在jsx中显示建筑值,您将看到其值正确更新。useEffect的唯一原因是,如果您需要在呈现itattached之前对建筑值做些什么,那么它是一个代码沙盒,向您展示我的意思,所以用lamens术语来说,useEffect只会在加载时清除“0”,所以当我第一次单击它时,它会显示正确的数字。我明白了。然后从技术上讲,我需要在useEffect中设置Building(1)以“实际”更改它。是这样吗?我之所以这么问,是因为我们的目标是在第一次单击时就对其进行更改,而不仅仅是看到控制台日志的更改。取决于我把它放在哪里。您的解决方案是否会在第一次单击时更改建筑?否,单击处理程序会更新状态。它在按下功能中不可用的唯一原因是设置状态是异步的。如果您在jsx中显示建筑值,您将看到其值正确更新。使用useEffect的唯一原因是,如果您需要在渲染itattached之前对建筑值执行一些操作,那么它是一个代码沙盒,向您展示我的意思。因此,在lamens术语中,useEffect只会在加载时清除“0”,因此当我第一次单击它时,它会显示正确的数字。