我的 Redux 处理来自 axios 的错误应该使用不同的操作还是使用附加数据的相同操作?
Posted
技术标签:
【中文标题】我的 Redux 处理来自 axios 的错误应该使用不同的操作还是使用附加数据的相同操作?【英文标题】:Should my Redux handling of errors from axios use different actions or the same action with additional data attached? 【发布时间】:2020-08-22 09:43:34 【问题描述】:我正在使用带有 redux 的 Axios 和 Thunk 中间件调用 api,以获取事务列表。 API 返回的任何错误也会返回一个错误对象。该错误对象的格式为
"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
或者,是六分之一,六分之一?
【问题讨论】:
我认为这是个人喜好问题,但在我看来,处理此问题的“Redux 方式”将在 reducer 中。动作创建者/thunk 应该包含尽可能少的业务逻辑。 reducer 应该是主要的“事实来源”,而不是单一的事实来源 【参考方案1】:我将只使用一种操作来处理减速器中的错误和处理情况。这确保了应用程序中的每个请求都是同构的,并且只有 3 个操作 _REQUEST
、_SUCCESS
、_ERROR
。并且更容易与redux-requests 或其他中间件集成。
【讨论】:
以上是关于我的 Redux 处理来自 axios 的错误应该使用不同的操作还是使用附加数据的相同操作?的主要内容,如果未能解决你的问题,请参考以下文章
处理 axios react-redux 应用程序中的 401 未授权错误
React Redux Axios:POST 请求未收到来自 redux 状态的凭据
为啥 axios .catch() 在 redux 中间件中捕获 javascript 错误?