状態管理に反応し、苦労して苦労しました。次のコードでは、ボタンがあります。それをクリックすると、2段階の機能がトリガーされます:onClick関数の現在の状態を取得していません
1)いくつかの検証を行い、成功したかどうかに基づいて状態のフラグを更新するには、減速機を呼び出します。
2)状態でupdatedフラグを使用して、検証に失敗した場合はユーザーに通知し、成功した場合は通常のプロセスを続行します。
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>
);
}
...
function mapStateToProps(state) {
return {
validationSucceeded: state.validatedData.validationSucceeded,
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({
validateData,
}, dispatch);
}
私の問題は、私はフラグ(this.props.validationSucceeded)の古いバージョンを取得していますということです。フラグの初期状態はtrueです。ボタンの最初のクリックで検証に失敗した場合、this.props.validationSucceededの値はtrueのままです。 falseへの変更は、2回目のクリックでのみ取得されます。コンソールでは、トリガされるアクションがnextStateのフラグの最新の値を持つことがわかります。このコードを変更して最新の値を取得するにはどうすればよいですか?
お返事ありがとうございます。私はcomponentWillUpdateとcomponentWillReceivePropsを試していましたが、最初のクリックで動作しましたが、その後に二次的な問題があります。ユーザーが誤ったデータを修正せず、検証フラグがfalseのままである場合、状態は変更されず、ライフサイクルメソッドは呼び出されません。検証フラグがfalseの間にボタンをクリックするたびにトリガするように通知する必要があります。 –
どこでもshouldcomponentupdateを使用していますか?状態は実際には変更されないので、コンポーネントの再レンダリングをトリガしない可能性が高く、そのロジックには決して当たらない。 私がいて、あなたが求めていることが必要なのは、私がこの状態で何もしないことと、 'validateData'を真または偽を返し、減速機に結びつけない関数にすることです。次に、あなたは単に 'validateData'の結果でnotifyOrSendを呼び出すでしょうが、私はあなたのコードの多くしか見ることができず、あなたのために働かないかもしれません – finalfreq