javascript - 在 onClick 处理程序中设置 useState 时出现问题

标签 javascript react-hooks

<分区>

我在 onClick 处理程序中使用 useState Hook 来更改和跟踪 focus 状态。我最初将其设置为 false,然后在处理程序中多次将其更改为 truefalse。每次更改后,我都会执行 console.log(focus) 并且我希望它与所做的更改相关。

    function App() {
       const [focus, setFocus] = useState(false);

       return (
        <div
          className="App"
          onClick={() => {
          console.log(focus);
          setFocus(true);
          console.log(focus);
          setFocus(false);
          console.log(focus);
      }}
       >
           <h1>App</h1>
       </div>
     );
    }

就我而言,在此代码片段中,我希望在控制台中看到 falsetrue,然后再次看到 false,但我看到了所有这些都是 false

为什么会这样?我觉得我在这里遗漏了一些非常基本的东西。

最佳答案

当您设置状态时,组件将被重新渲染。状态变化本质上不是同步的。尝试在 useState 行下方添加一个 console.log,您会发现每次设置焦点时它都会被调用,因为整个组件都会重新呈现。

关于javascript - 在 onClick 处理程序中设置 useState 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58597287/

相关文章:

javascript - 如何在 WebGL 上下文之外访问深度缓冲区的值?

reactjs - react 警告超过最大更新深度

javascript - useEffect deps 中的 ref.current 在预期时不起作用(与 useCallback ref 相比)

javascript - react 注册同步 setState( Hook )

javascript - 无法找到两种类型的数组状态更新之间的区别

reactjs - 异步更新 mobx React hook 上的存储

javascript - 将 cordova-plugin-firebase-authentication auth 转换为 Firebase JS-SDK auth

javascript - 无法在 UIWebView 中执行 javascript 函数?

javascript - 带有 ionic 框架的 instagram feed 无限滚动不会在转发器错误中停止重复

javascript - 我们应该告诉 browsersync 重新加载特定的资源类型吗?