javascript - getState() 在几秒钟后更改已调度操作的值
问题描述
var signedIn = useSelector(signedInState);
function handle(){
dispatch(signInUser(username.value, password.value))
console.log(signedIn,store.getState().Auth.signedIn)
setTimeout(() => {
console.log(signedIn,store.getState().Auth.signedIn)
if(signedIn){
console.log("push")
history.push("/")
}
}, 2000)
}
此函数在 onclick 后执行到组件中,当调度操作时,我有 2 个控制台日志,一个带有选择器,一个带有 getState(),我收到 2 个不同的结果:
第一个控制台日志是: null null
第二个控制台日志是: null true //getState 在 2 秒后捕获正确的状态
为什么选择器和 getState 函数在 setTimeout 之后收到不同的结果?为什么在第一个 console.log 中选择器和 getState 没有得到新值?
//动作导出函数signInUser(用户名,密码){
return async dispatch =>{
const {
SIGN_IN_USER_SUCCESS,
SIGN_IN_USER_FAIL,
} = AuthKeys;
var returning;
var authenticationData = {
Username: username,
Password: password,
};
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = {
UserPoolId: settings.UserPoolId,
ClientId: settings.ClientId,
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
Username: username,
Pool: userPool,
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess:function (result) {
console.log("access token + " + result.getAccessToken().getJwtToken());
dispatch({
type: SIGN_IN_USER_SUCCESS,
payload: cognitoUser,
});
return true
},
onFailure:function (err) {
dispatch({
type: SIGN_IN_USER_FAIL,
payload: cognitoUser,
});
alert(err.message);
return false
},
});
};
}
// 减速器
const initialState = {
signedIn : null,
signedInUser : null,
}
export default (state = initialState, action) => {
const {
//Requests
SIGN_IN_USER_SUCCESS,
SIGN_IN_USER_FAIL,
} = AuthKeys;
switch(action.type){
case SIGN_IN_USER_SUCCESS:
return { ...state,
signInEmailData : initialState.signInEmailData,
signInPasswordData : initialState.signInPasswordData,
signedIn : true,
signedInUser : action.payload}
case SIGN_OUT_USER_SUCCESS:
return {
...state,
signedIn : false,
signedInUser : INITIAL_STATE.signedInUser,
}
case SIGN_IN_USER_FAIL:
return { ...state,
signInPasswordData : INITIAL_STATE.signInPasswordData,
signedIn : false
};
}
//selector
export const signedInState=(state)=>state.Auth.signedIn
解决方案
推荐阅读
- javascript - 向对象数组中的对象添加元素Javascript
- java - 如何为自定义 Minecraft .jar 创建正确的 .json 文件?
- uitableview - 如何像 tvOS 中的设置应用一样设置 UITableViewCell 背景颜色
- php - 如何从 mysql db react native 获取实时数据
- pycharm - pymongo v3.10,MongoClient 在 Windows 中使用“from pymongo import MongoClient”获取 pyCharm 错误“无法导入名称 'MongoClient”
- c# - 如何在派生类c#中使用接口中的受保护属性?
- c# - 无法在 UserControl 上设置子控件的 Name 属性
- javascript - Android webview onConsoleMessage 错误:Uncaught SyntaxError: Invalid or unexpected token
- r - 将手动图例添加到 ggplot
- 3dsmax - maxscript 的渲染问题