лучший способ справиться с получением статуса в редуксе - PullRequest
0 голосов
/ 19 апреля 2020

Я ищу лучший способ обработки моего статуса извлечения в моем приложении, самый простой способ - создать isFetching [actionName] для каждого действия, и тогда состояние будет выглядеть примерно так:

state:{
todos:[...],
user[...],
isTodosFetching:true/false,
isUserFetching:true/false
}

но я ищу более элегантный способ хранения состояний извлечения в магазине.

, поэтому я попытался придумать альтернативный способ и подумал о создании fetchingActionsReducer, который будет добавлять каждое действие извлечения к dict (объект) в хранилище, а затем состояние будет выглядеть следующим образом:

todos:[...],
user[...],
loadingTasks:{
isTodosFetching:true/false,
isUserFetching:true/false
}}```

now every component will get loadingTasks with mapStateToProps and that's it. 
this will reduce the boilerplate to one simple reducer and one action.
reducer:

export const loadingTasks = (state = {}, action) => {switch (action.type) {case START_LOADING_TASK: return Object.assign ({}, состояние, {[action.payload]: true}); case END_LOADING_TASK: вернуть Object.assign ({}, состояние, {[action.payload]: false}); по умолчанию: возвращаемое состояние; }};

actions:

export const startLoadingTask = (taskName) => ({тип: START_LOADING_TASK, полезная нагрузка: taskName,});

экспорт const endLoadingTask = (taskName) => ( {type: END_LOADING_TASK, payload: taskName,}); `` `

Я пробовал, это работает отлично, но я хотел бы знать,
1. Есть лучший способ обработать выборку статуса с помощью приставки ? 2. теперь многие портфели ios будут подписаны на состояние loadingTasks и боюсь, это вызовет проблемы с производительностью . (для каждого изменения в загрузочных задачах все реагирующие будут запускать алгоритм копания для всех подписанных компонентов)

1 Ответ

0 голосов
/ 19 апреля 2020

Я предлагаю совмещать статус выборки с запрашиваемым ресурсом, например:

state:{
  todos: {
    isFetching: true, // or false
    data: [/* ... */]
  },
  user: {
    isFetching: true, // or false
    data: [/* ... */]
  }
}

Таким образом, когда статус выборки todos изменяет только компоненты, зависящие от задач, будет перерисовываться.

Этот подход также включает дополнительные статусы.

Например, если запрос todos не выполняется, вы можете иметь статус ошибки. Или, если пользовательский запрос завершается неудачно, выдается сообщение об ошибке, содержащее некоторый контекст или даже содержащее ошибку, возвращенную из API:

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