我的 Redux 处理来自 axios 的错误应该使用不同的操作还是附加附加数据的相同操作?

Should my Redux handling of errors from axios use different actions or the same action with additional data attached?

我正在使用带有 redux 的 Axios 和 Thunk 中间件调用 api 来获取事务列表。 API returns 的任何错误也会返回一个错误对象。该错误对象的格式为

{
  "error": {
    "id": "string",
    "name": "string",
    "detail": "string"
  }
}

如果我收到 400,这是一些一般性错误,但 404 表示未找到交易。我想知道的是逻辑应该在哪里解析响应?我是否应该在动作创建者中解析响应,并发送单独的动作,看起来像这样:

catch (e) {
  if (e.response) {
    if (e.response.status === 400) {
      //failed for some reason
      dispatch({type: TRANSACTION_REQUEST_ERROR, data: e.response.data})
    }
    if(e.response.status === 404) {
      //no transactions, no problem. 
      dispatch({type: NO_TRANSACTIONS_FOUND, data: e.response.data})
    }
  }
}

或者,我是否应该使用相同的操作并包含 reducer 决定如何更新状态所需的任何响应信息,并将该逻辑委托给 reducer?

catch (e) {
  if (e.response) {
    dispatch({type: TRANSACTION_REQUEST_ERROR, data: e.response.data})
  }
}

//减速机

switch(action.type) {
  case TRANSACTION_REQUEST_ERROR:
   if(action.data.error.id === 'some id)
    //update some state
   else
     //do something else
}

或者,是一个中的六个,另一个中的六个?

我只会对减速器中的错误和处理情况使用一种操作。这确保应用程序中的每个请求都是同构的,并且只有 3 个操作 _REQUEST_SUCCESS_ERROR。而且更容易与 redux-requests 或其他中间件集成。