Redux商店双嵌套

时间:2017-02-24 19:20:29

标签: javascript reactjs redux

我在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,
});




3 个答案:

答案 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]})

假设有多个用户是可能的,为什么不将你的状态中的用户属性维护为数组呢?