![](/img/trans.png)
[英]Redux Form won't allow Initialize Form state values to be edited
[英]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函数combineReducers
: https : combineReducers
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.