我需要将2个对象保存在用户和客户商店中。因此,我创建了动作,reduce和存储如下。
export const ADD_USER = "ADD_USER";
export const ADD_CUSTOMER = "ADD_CUSTOMER";
这是我的动作文件,而我的减速器如下所示
import { ADD_USER, EDIT_USER } from '../actions';
const userReducer = (state = [], action) => {
switch (action.type) {
case ADD_USER:
state.user = {...state.user, user: action.payload};
return state
default:
return state;
}
}
export default userReducer;
这是我的根减少剂
import { combineReducers } from 'redux';
import userReducer from './user';
import customerReducer from './customer';
const rootReducer = combineReducers({
user: userReducer,
customer: customerReducer
});
export default rootReducer;
我这样称呼减速器
store.dispatch({
type: ADD_USER,
payload: user,
})
工作正常。但是如果我需要从存储中获取数据,以便需要这样调用
let store = store.getState();
console.log(store.user) is not working
console.log(store.user.user) is working.
如何避免此嵌套级别。我需要像这样从商店中获取用户
store.user
有人可以帮助解决此问题吗?
预先感谢
答案 0 :(得分:2)
有一个问题,因为您在rootReducer中在状态内创建了 user 参数。之后,您尝试在 userReducer 中添加另一个 user 参数。这就是为什么您使用嵌套对象创建问题的原因。
解决问题的简便方法:
import { ADD_USER, EDIT_USER } from '../actions';
const userReducer = (state = [], action) => {
switch (action.type) {
case ADD_USER:
state.user = {...state, action.payload}; //there is a fix
return state
default:
return state;
}
}
export default userReducer;
答案 1 :(得分:1)
您应该在化简器中返回一个新的整体状态,以这种方式更新您的化简器文件
import { ADD_USER, EDIT_USER } from '../actions';
const userReducer = (state = [], action) => {
switch (action.type) {
case ADD_USER:
return {
...state,
user: action.payload
}
default:
return state;
}
}
export default userReducer;