首页 > 解决方案 > 初始状态未在 Dispatch 上更新

问题描述

AuthReducer-reducer 文件

 const initialState = {
    isAuthenticated: false,
}
const authReducer = (state = initialState, action: any) => {
    switch (action.type) {
        case 'SIGN_IN':
            state = {
                ...state,
                isAuthenticated: true,
            }
            break;
        case 'SIGN_OUT':
            state = {
                ...state,
                isAuthenticated: false,
            }
            break;
        default:
            state = {
                isAuthenticated: false,
            }

    }
    return state;
}
export default authReducer;

调度员调度动作

const authDispatch = useDispatch();
authDispatch({ type: 'SIGN_IN'});

店铺

const rootReducer = combineReducers({
user: AuthReducer

}); const store = createStore(rootReducer, compose(applyMiddleware(thunk)));

结果

{isAuthenticated: false}

我想要的结果

{isAuthenticated: true}

我该如何解决这个错误我无法解决这个错误,请帮助我...

标签: reactjsredux

解决方案


您的default案例正在设置isAuthenticated: false- 并且该default案例将被每个 Redux 调度过的操作所击中,而不是"SIGN_IN"or "SIGN_OUT"。因此,一旦调度了另一个动作,它就会返回到isAuthenticated: false.

你应该有

  default:
    return state

另外,请注意,您通常正在编写一种非常古老的 Redux 风格,我们不再推荐它,因为它需要大量的样板(现代 Redux 也不会发生这种情况)。您可能正在关注一个非常过时的教程。有关最新教程,请参阅官方 Redux 教程


推荐阅读