javascript - 为什么必须调用函数两次才能更新钩子(Hook)状态?

标签 javascript reactjs react-hooks

我正在尝试实现以下是/否按钮:

import React, { useState } from "react";

const YesNoComponentFunctional = () => {
  const [button, setButton] = useState("");

  const onYesPress = () => {
    setButton("Yes");
    console.log({ button });
  };

  const onNoPress = () => {
    setButton("No");
    console.log({ button });
  };

  return (
    <div>
      <button onClick={() => onYesPress()}>Yes</button>
      <button onClick={() => onNoPress()}>No</button>
     </div>
  );
};
export default YesNoComponentFunctional; 

我从中得到的article here .

我不明白为什么我必须单击按钮两次才能正确地将消息显示到控制台。为什么会发生这种情况?

最佳答案

setButton 是异步方法,您的按钮状态不会立即更新。 您可以使用 useEffect hook 来检查按钮的值是否更新。

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

关于javascript - 为什么必须调用函数两次才能更新钩子(Hook)状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59733308/

相关文章:

javascript - 返回嵌套 Promise 时无法读取未定义的属性 'then'

javascript - 尝试使用 Formik 进行多步骤验证。如何验证字段?

reactjs - 将 highcharts-custom-events 与 React 集成

javascript - 为什么状态始终为 0,即使使用 useCallback 后也是如此

javascript - 将值从一种模式传递到另一种模式

javascript - 如何为 meteor 网站添加菜单/子主题?

javascript - 选中/取消选中表格中的所有复选框

javascript - React-native-snap-carousel 无法正确渲染

reactjs - 是否安全地在客户端创建带有 token 的 cookie?

javascript - 使用快乐的 ESLint 运行一次 useEffect