javascript - React 复选框 - Onchange 复选框,第一次未定义

标签 javascript reactjs

React 复选框 - 第一次点击(时间)将输出更改为未定义。之后显示有效的 true 或 false 输出。我用谷歌搜索了这个问题,但没有解决问题。

请帮助,我在这里做错了什么。

我在State中定义checked为false:

  constructor() {
        super();
        this.state = {
         formFields: {
            checked: false,
          },
        };
      }

处理复选框:

handleCheckBox = (e) => {
    this.setState({ checked: !this.state.checked });
    console.log("checked", this.state.checked);
    // this.setState({ checked: !this.state.formFields.checked });
    // console.log("checked", this.state.formFields.checked);
  };

解构:

const { ...formFields } = this.state;

在表单checkbox中输入如下:

<input
     type="checkbox"
     checked={formFields.checked}
     onChange={this.handleCheckBox}
 />

第一次检查输出如下: output

最佳答案

这是因为 setState 是异步工作的。要获得您想要的行为,请将 console.log 作为回调传递给 setState 函数:

this.setState(
     { checked: !this.state.checked }, 
     () => console.log(this.state.checked)
);

回调将在状态更新后调用。通过在回调之外调用 console.log(),javascript 将在状态更新之前运行 console.log。

这是因为无论如何,在进行任何异步调用之前都必须清除当前调用堆栈。

在这里阅读更多:https://developer.mozilla.org/en-US/docs/Glossary/Call_stack#:~:text=A%20call%20stack%20is%20a,from%20within%20that%20function%2C%20etc .

关于javascript - React 复选框 - Onchange 复选框,第一次未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62423713/

相关文章:

javascript - 在初始化 Javascript 时执行的私有(private)函数中设置公共(public)属性

javascript - Google Geocoder url 和 javascript 请求之间的不同结果

javascript - 当到达幻灯片中的最后一个 div 时,如何跳回第一个 div?

node.js - Webpack 5 重大变更 "process/browser"

javascript - 如何在 JavaScript 中进行字母数字排序

javascript - 在类组件中使用 React 钩子(Hook)

reactjs - React - Flatlist 不渲染任何内容

javascript - 在 highcharts-react-official 上定义和应用主题

reactjs - 如何使用uid从firebase获取数据

javascript - Angular 计时器自定义倒计时变量