我使用带有redux的react-thunk来实现登录功能,但是当我使用getState()访问状态时,该属性返回未定义。
SystemState会将IsLogined和user设置为LoginSuccessed,稍后我会将其用于访问令牌。但是当我尝试实现注销函数时,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;
}
}CombineReducer
const rootReducer = combineReducers({
systemState
});发布于 2019-04-10 16:45:27
问题是你曲解了国家结构是什么。
您已经将根缩减程序定义为:
const rootReducer = combineReducers({
systemState
});反过来,systemState reducer的初始状态为:
const initState = {
isLogined: false
}这两件事定义了getState()返回的内容的结构,实际上是:
{
systemState : {
isLogined : true
}
}请注意,这意味着您需要state.systemState.isLogined,而不是state.isLogined。
因此,在您的情况下,您可能需要的是:
const state = getState();
const {isLogined} = state.systemState;https://stackoverflow.com/questions/55590596
复制相似问题