Я использую react-thunk
с redux
для реализации функции входа в систему, но когда я получаю доступ к состоянию с помощью getState()
, свойство возвращает неопределенное значение.
SystemState
установит IsLogined
и user
когда LoginSuccessed
, я буду использовать его позже для токена доступа.Но когда я пытаюсь реализовать функцию выхода из системы, getState().Property
возвращает неопределенное
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()
не должен вызываться внутри асинхронной функции?
--- edit ---
Редуктор для 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
});