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