Redux不初始化状态

时间:2019-03-16 20:23:32

标签: javascript redux

我建立了下一个减速器结构:

//index.js

import userReducer from "./user";

const initState = {
    user: null
};

const rootReducer = (state = initState, action) => {
    const {
        user
    } = state;

    if (action === "SIGN_OUT") {
        return {
            user: userReducer(null, action)
        };
    }
    return {
        user: userReducer(user, action)
    };
};

export default rootReducer;

//user.js

const initState = {
    userId: null,
    clientId: null,
    type: null
}

const userReducer = (state = initState, action) => {
    switch (action.type) {
        case "SET_USER_ID" :
            const { userId } = action;
            return {
                ...state,
                userId
            };
        case "SET_USER_DATA" :
            const { userData } = action;
            return {
                ...state,
                ...userData
            };
        default : return state;
    };
};

export default userReducer;

显然,我有更多的减速器,是为了简化演示。

我的逻辑是,如果userReducer的第一个参数是虚假值,它将使用initState。在rootReducer中,user的值为空,因此在userReducer内部,它应使用initState作为状态。

不幸的是,我的状态是这样的:

{ user: null }

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

仅当传递(r + j) % 60或不传递任何值时才应用默认参数值。除undefined外传递null和其他虚假值将覆盖默认值。 here的更多内容。

正如克里斯海恩在回答中指出的那样,undefined应该是if (action === "SIGN_OUT")

答案 1 :(得分:1)

rootReducer中,您将参数action用作字符串(“ SIGN_OUT”)。然后,您将此变量传递到userReducer中,并尝试从action.type中读取字符串。那可能就是问题所在。

我不确定,但是您似乎试图在rootReducer中组合多个reducer,对吧?

检查内置的redux函数combineReducershttps://redux.js.org/api/combinereducers