javascript - 在 React Hooks 中切换 bool 状态

标签 javascript reactjs react-hooks use-effect use-state

当我运行以下代码并单击按钮时,我成功触发了 useEffect 函数:

const { useState, useEffect } = React;

const Example = () => {
  const [bool, setBool] = useState(false);

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

  return (
    <button
      type='button'
      onClick={() => {
        setBool(!bool);
        setBool(!bool);
      }}
    >
      Check
    </button>
  );
};

ReactDOM.render(
  <Example />,
  root
)
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>

<div id="root"></div>

但是,当我写时:

const { useState, useEffect } = React;

const Example = () => {
  const [bool, setBool] = useState(false);

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

  return (
    <button
      type='button'
      onClick={() => {
        setBool(true);
        setBool(false);
      }}
    >
      Check
    </button>
  );
};

ReactDOM.render(
  <Example />,
  root
)
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>

<div id="root"></div>

据我了解,useEffect 函数不会被触发,因为 setBool 是异步的,并且 React 会合并这些更改,因此最终状态不会更改(bool 仍然为 false)。

我的问题是,为什么 React 在我出现的 !bool 和 !bool 的情况下无法检测到它。

谢谢

最佳答案

在第一种情况下,您将获取 bool当前值(无论该值是什么)并在将其设置为状态之前对其取反。结果,状态发生改变,因此 useEffect 被触发。

在第二种情况下,您提供一个硬编码值。如果 bool 的值已经是 false,则 setBool(false) 不会对状态产生任何影响;因此,useEffect 将不会被触发。

关于javascript - 在 React Hooks 中切换 bool 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69389738/

相关文章:

javascript - 在javascript中乘以10的幂并除以10的幂

javascript - 循环遍历 JSON 数据以生成 HTML

javascript - 使用 sinon 为 POST 请求模拟获取 API,为 react.js 应用程序开 Jest

javascript - React Router Dom,使用 useNavigate 将数据传递给组件

javascript - 如何将复选框中的 div id 作为参数传递给 onclick 方法?

javascript - 如何捕获浏览器超时并执行我自己的错误消息?

javascript - React Native activeTintColor 未应用于选定的抽屉项目

javascript - JavaScript 中无异步的执行顺序

javascript - 这个 useReduxState hook 和 useSelector 在性能方面的区别?

reactjs - React hooks 如何更好地根据 props 变化更新多个状态