同步操作调用后立即调用存储值时存储值错误



我正在使用带有reactjs的redux
我正试图在对存储变量值进行变异的操作发出后立即访问该值。

点击一个按钮,我就会触发这样的动作:

submit = () => {
this.props.updateChallengeStatus(this.props.password);
alert(this.props.challengeValidated)
};

challengeValidated密码由于mapStateToProps redux方法而绑定到道具,如:

const mapStateToProps = (state) => ({
password: state.password.value,
challengeValidated: state.challenge.challengeValidated
});

updateChallengeStatus绑定到道具,这要归功于mapDispatchToPropsredux方法,比如:

const mapDispatchToProps = dispatch => ({
updateChallengeStatus: passwordValue => dispatch(updateChallengeStatus(passwordValue))
});

我已经检查过,passwordValue已正确传递给调度的操作。

我的redux操作定义如下:

export function updateChallengeStatus(passwordValue){
const credential = "c2VrdXJpdGF5";
const challengeValidated = passwordValue === atob(credential);
return {
type: VALIDATE_CHALLENGE,
payload: challengeValidated
}
}

和我的减速器:

function challengeReducer(state = {challengeValidated: false}, action){
switch (action.type) {
case VALIDATE_CHALLENGE:
return Object.assign({}, state, {
challengeValidated: action.payload
});
default:
return state
}
}

在这里,我将challengeValidated的初始状态设置为false,然后,当我的操作被调度时,将我的challengeValidated值更改为操作有效负载。

由于某种原因,我的警报一直显示false。尽管我确实确信我的状态会发生变化,因为我正在使用react devtools,并且我的challengeValidated在过程结束时实际上设置为true。我认为这可能是因为dispatch是一个异步调用,但在阅读文档后,它似乎不是。

您试图在调度操作后立即查看React组件道具的内容。你不能这样做-React还没有机会真正重新提交和更新,因为你还处于执行当前点击处理程序的过程中。因此,this.props.whatever将仍然与函数开始执行时相同。

最新更新