Reactjs 无法在onClick函数中获取当前状态

Reactjs 无法在onClick函数中获取当前状态,reactjs,redux,react-redux,Reactjs,Redux,React Redux,新的反应和重复和挣扎与国家管理一点。在下面的代码中,我有一个按钮。单击它将触发两步功能: 1) 调用reducer进行一些验证,并根据是否成功更新状态中的标志 2) 如果验证失败,请使用状态中的更新标志通知用户,如果验证成功,请继续正常过程 transfer() { this.props.validateData(); this.notifyOrSend(this.props.validationSucceeded); } notifyOrSend(validationSucceede

新的反应和重复和挣扎与国家管理一点。在下面的代码中,我有一个按钮。单击它将触发两步功能:

1) 调用reducer进行一些验证,并根据是否成功更新状态中的标志

2) 如果验证失败,请使用状态中的更新标志通知用户,如果验证成功,请继续正常过程

transfer() {
  this.props.validateData();
  this.notifyOrSend(this.props.validationSucceeded);
}

notifyOrSend(validationSucceeded) {
  if (validationSucceeded === false) {
    this.refs.validationModal.showModal();
  } else {
    this.props.sendTransfer();
  }
}

render() {
    return (
      <div>
        <Button label="Transfer" onClickFn={this.transfer}/>
        <ValidationModal ref="validationModal"/>
      </div>
  );
}

我的问题是我得到了一个旧版本的标志(this.props.validationsucceed)。标志的初始状态为true。如果第一次单击按钮时验证失败,this.props.validationSucceeded的值仍为true。只有在第二次单击时才会选择更改为false。我可以在控制台中看到,被触发的操作具有nextState中标志的最新值。如何更改此代码以获得最新的值?

setState更像是一个事件,它不会立即发生,因此,您可以向setState传递第二个函数,该函数将在实际发生时执行

由于您在之后立即调用了
notifyOrSend
,因此在下一次渲染之前,状态将保持不变。我将考虑将
notifyOrSend
函数移动到组件的适当生命周期方法中。我假设它可能是
componentdiddupdate
componentWillUpdate
,具体取决于
notifyOrSend
函数的实际功能

从react文档:

setState()不会立即改变this.state,但会创建 等待状态转换。调用此命令后访问this.state 方法可能返回现有值。没有 保证对setState的调用和可能发生的调用的同步操作 为提高性能而进行批处理


谢谢你的回复。我确实尝试过componentWillUpdate和componentWillReceiveProps,它们在最初的点击中起作用,但是还有一个次要问题。如果用户没有更正错误数据,并且验证标志保持为false,则状态不会更改,并且不会调用生命周期方法。我需要在验证标志为false时,每次单击按钮时触发通知。您是否在任何位置使用shouldcomponentupdate?因为状态实际上不会改变,所以它很可能不会触发组件的重新加载,并且永远不会达到该逻辑。如果是我,我需要你所要求的,我不会通过状态执行任何操作,让
validateData
只是一个返回true或false的函数,而不会将它绑定到减速机。然后,您只需调用notifyOrSend,并显示
validateData
的结果,但我只能看到您的大部分代码,可能对您不起作用
function mapStateToProps(state) {
  return {
    validationSucceeded: state.validatedData.validationSucceeded,
  };
}

function mapDispatchToProps(dispatch) {
  return bindActionCreators({
    validateData,
  }, dispatch);
}