【发布时间】:2019-08-30 14:47:27
【问题描述】:
我正在使用react-thunk 和redux 来实现登录功能,但是当我使用getState() 访问状态时,该属性返回未定义。
SystemState 会在LoginSuccessed 时设置IsLogined 和user,稍后我将使用它作为访问令牌。但是当我尝试实现注销功能时,getState().Property 返回 undefined
function logout() : ThunkAction<void, SystemState, null, Action<string>> {
return async (dispatch, getState) => {
const { user, isLogined } = getState();
console.log(`user: ${user} isLogined:${isLogined}` )
// Console writes user: undefined isLogined: undefined
if (!isLogined) {
dispatch(actions.LogoutFailed("No login Session Found"));
} else if (user) {
const result = await services.Logout(user.UserId);
if (result.errorMessage) {
dispatch(actions.LogoutFailed(result.errorMessage));
} else {
dispatch(actions.Logout());
}
}
}
}
getState() 不应该在异步函数中调用吗?
--- 编辑---
SystemSate 的减速器
const initState = {
isLogined: false
}
function SystemStateReducer(state = initState, action) {
switch(action.type) {
case types.LOGIN_SUCCESS:
return {
...state,
isLogined: true,
user: action.user,
errorMessage: undefined
}
case types.LOGIN_FAILED:
return {
...state,
isLogined: false,
user: undefined,
errorMessage: action.errorMessage
}
case types.LOGOUT_SUCCESS:
return {
...state,
isLogined: false,
user: undefined,
errorMessage: undefined
}
case types.LOGOUT_FAILED:
return {
...state,
isLogined: false,
user: undefined,
errorMessage: action.errorMessage
}
default:
return state;
}
}
组合减速器
const rootReducer = combineReducers({
systemState
});
【问题讨论】:
-
你能展示你剩下的减速器吗?你的
combineReducers()电话是什么样的? -
嗨@markerikson,我已经添加了reducer和
combineReducers(),但它似乎与我的问题无关。
标签: reactjs react-redux react-thunk