Должен ли мой Redux для обработки ошибок из ax ios использовать разные действия или одно и то же действие с дополнительными данными? - PullRequest
2 голосов
/ 07 мая 2020

Я вызываю api, используя промежуточное ПО Ax ios и Thunk с redux, чтобы получить список транзакций. Для любых ошибок, возвращаемых API, также будет возвращен объект ошибки. Этот объект ошибки имеет формат

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

. Если я получаю 400, это какая-то общая c ошибка, но 404 означает, что транзакции не найдены. Я хотел бы знать, где должен жить logi c, чтобы проанализировать ответ? Должен ли я анализировать ответ в создателе действия и отправлять отдельные действия, выглядящие примерно так:

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})
    }
  }
}

или я должен использовать то же действие и включать любую информацию ответа, которая требуется редуктору для принятия решения о том, как обновить состояние, делегируя этот logi c редуктору?

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
}

Или это шесть из одного, полдюжины другое?

1 Ответ

1 голос
/ 07 мая 2020

Я бы использовал только одно действие для ошибки и обработки случаев в редукторе. Это гарантирует, что каждый запрос в приложении будет изоморфным c и будет иметь только 3 действия: _REQUEST, _SUCCESS, _ERROR. И проще интегрироваться с промежуточным ПО, таким как redux-requests или другими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...