reactjs - react /Redux : Where to process data from API response and dispatching action from reducers

标签 reactjs redux

我是 React 和 Redux 的新手,所以这在某种程度上是一个最佳实践问题。

我有一个操作创建器,可以触发 API 调用并将响应分派(dispatch)给我的 reducer :

export function loadDrawSuccess(draw) {
  return { type: ActionTypes.LOAD_DRAW_SUCCESS, draw};
}

export function loadDraw() {
  return function(dispatch) {
    dispatch(beginAjaxCall());
    return drawApi.getDraw().then(draw => {
      dispatch(loadDrawSuccess(draw));
    }).catch(() => {
      dispatch(ajaxCallError());
    });
  };
}

现在......在我的 reducer 中,我正在处理响应以从中提取我需要的数据......

function extractNextOpenDraw(draws) {
  if (!draws || typeof draws.content === 'undefined'){
    return {};
  }
  let openDraws = draws.content.filter(draw => {return draw.status === 'open';});
  let sortedOpenDraws = openDraws.sort((draw1, draw2) => {
    return DateHelper.getDateObjectFromUtcDateString(draw1.closeTimeUtc) - DateHelper.getDateObjectFromUtcDateString(draw2.closeTimeUtc);
  });
  return sortedOpenDraws[0];
}


export default function drawReducer(state = initialState.draw, action) {

  switch (action.type) {
    case types.LOAD_DRAW_SUCCESS: {
      return objectAssign({}, extractNextOpenDraw(action.draw), {dateModified: action.dateModified});
    }
    ........

    default:
      return state;
  }
}

我的问题是

  1. 我在 reducer 中处理响应是否正确,还是应该在 API 类或操作创建器中处理?
  2. 在 API 返回且没有错误的情况下,但响应格式不符合预期格式,我希望分派(dispatch) ajaxCallError() 操作。在 reducer 中执行此操作是否正确?

最佳答案

  1. 不,reducer 应该尽可能干净,并且仅使用提供给它的值来更新存储。您应该解析操作本身的响应,或者为 api 创建一个包装器。我相信,在行动本身中这样做就足够了。
  2. 不,处理操作中的所有此类错误并将其分派(dispatch)到那里。 reducer 不能也不应该调度操作。

关于reactjs - react /Redux : Where to process data from API response and dispatching action from reducers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41545536/

相关文章:

javascript - React-Native 无法解析字体模块

javascript - 文本编辑器的 Redux 架构 : dealing with coupled state

javascript - 在 redux 中进行 fetch 调用时处理错误

javascript - React Redux 应用程序结构多个角色

javascript - React setState 渲染行为

javascript - get/src/components/App.jsx : Unexpected token, 预期 "}"onClick 事件错误

reactjs - React Redux 和 Should 组件更新优化

javascript - 为什么在 React 中使用 .map() 时需要展开运算符,而在纯 JavaScript 中不需要?

javascript - Redux 将嵌套值添加到当前状态

javascript - 如何在没有 store.dispatch 的情况下链接异步操作并等待结果