我在api调用后获得双嵌套状态。就是这样。
Screenshot from redux devtools
以下是我的行动
export const getUserSuccess = user => ({
type: GET_USER_SUCCESS,
user,
});
export const getUserFailure = error => ({
type: GET_USER_FAILURE,
error,
});
export const getUserRequest = () => (
dispatch => (
axios.get('./user.json')
.then(response => dispatch(getUserSuccess(response.data)))
.catch(error => dispatch(getUserFailure(error)))
)
);

这是我的用户缩减器
export default function user(state = {}, action) {
switch (action.type) {
case GET_USER_SUCCESS:
return {
...state,
user: action.user,
};
case GET_USER_FAILURE:
return {
...state,
error: action.error,
};
default:
return state;
}
}

这是我的root reducer
export default combineReducers({
user,
});

答案 0 :(得分:2)
您需要传播为用户提供的数据,而无需将其分配给user
。您的减速机已经在其中
case GET_USER_SUCCESS:
return {
...state,
...action.user
};
答案 1 :(得分:0)
如果此reducer应使用新用户的完整表示更新状态(并丢弃旧数据),则应将新用户作为状态返回。
你可以给以下一个镜头吗?
export default function user(state = {}, action) {
switch (action.type) {
case GET_USER_SUCCESS:
return action.user;
case GET_USER_FAILURE:
return {
...state,
error: action.error,
};
default:
return state;
}
}
答案 2 :(得分:0)
根据这句话判断
如果我尝试使用数组用户,那么数组将被销毁
为什么不使用Object.assign()?
return Object.assign({}, state, {user: [...state.user, ...action.user]})
假设有多个用户是可能的,为什么不将你的状态中的用户属性维护为数组呢?