繁体   English   中英

Redux不初始化状态

[英]Redux doesn't initialize state

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

//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值为null,因此在userReducer内部,它应使用initState作为状态。

不幸的是我的状态看起来像这样:

{ user: null }

我究竟做错了什么?

仅当undefined或未传递任何值时,才应用默认参数值。 除了undefined以外,传递null和其他虚假值将覆盖默认值。 这里更多。

就像chrisheyn在他的回答中指出的, if (action === "SIGN_OUT")应该是if (action.type === "SIGN_OUT")

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

我不确定,但似乎您尝试在rootReducer组合多个reducer,对吗?

检查combineReducers redux函数combineReducershttps : combineReducers

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM