我正在使用带有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
将仍然与函数开始执行时相同。