ReactJS:setState和回调后状态未更新

时间:2019-04-13 04:42:39

标签: javascript reactjs

这是我的初始状态:

this.state = {
  requiredError: false,
  addressSelectError: false,
  recipientError: false,
  open: false,
};

这是我的问题所在:

processCheckout () {
    this.setState({
      requiredError: true, 
      addressSelectError: true,
      recipientError: true,
    }, () => {
      console.log('required error', requiredError);
      console.log('address error', addressSelectError);
      console.log('recipient error', recipientError);
    })
}

我将它们全部设置为true,但控制台仍记录为false:

enter image description here

我已经使用了回调,但是它仍然没有改变。有帮助吗?

我正在调用按钮processCheckout()上的onClick()函数。

编辑:我已经尝试过在渲染中登录控制台,并且它们都是true

2 个答案:

答案 0 :(得分:2)

将函数更改为箭头语法,以便可以访问全局状态。

processCheckout= () => {
    this.setState({
      requiredError: true, 
      addressSelectError: true,
      recipientError: true,
    }, () => {
      console.log('required error', this.state.requiredError);
      console.log('address error', this.state.addressSelectError);
      console.log('recipient error', this.state.recipientError);
    })

或将其绑定到

等构造函数
constructor(props) {
    super(props);

    // This binding is necessary to make `this` work
    this.processCheckout = this.processCheckout.bind(this);
  }

您可以详细了解here

答案 1 :(得分:1)

没有看到完整的代码,我假设您已经声明了变量 requiredError, addressSelectError and recipientError在您课堂上的某个地方:

在回调中,尝试直接访问this.state

processCheckout() {

    this.setState(
      {
        requiredError: true,
        addressSelectError: true,
        recipientError: true
      },
      () => {
        console.log("required error", this.state.requiredError);
        console.log("address error", this.state.addressSelectError);
        console.log("recipient error", this.state.recipientError);
      }
    );
  }