Обновите определенное свойство в каждом объекте в состоянии сокращения

Я хочу обновить определенное свойство в каждом объекте в состоянии избыточности и предполагаю, что у меня есть такое основное состояние.

networkFailure: true
employer: {
  signUp: {
    data: null
    error: null
    loading: true
  }
}
user: {
  signUp: {
    data: null
    error: null
    loading: false
  }
}

Предположим, я столкнулся с сбоем сети, тогда состояние networkFailure становится true , и с этим мне нужно сбой (false) при загрузке состояния signUp работодателя и всех статусов загрузки в значение false других объектов.

Возможно ли это сделать в одном редукторе? или какие-либо предложения, как сделать это лучше? Я настроил 3 функции редуктора для работодателя, пользователя и сети.


person bews99    schedule 04.02.2020    source источник


Ответы (2)


Я думаю, что есть два способа: 1. Использование редукционного преобразователя и отправка действия, а затем отправка 3 действий внутри функции действия, которые возвращают вам функцию отправки. Что-то вроде этого:

function setErrorAction() {
  return dispatch => {
      const networkError = {type: "network/singup/error"}
      const employer Error = {type: "employer/singup/error"}
      const userError = {type: "user/singup/error"}

      dispatch(networkError)
      dispatch(employer)
      dispatch(userError)
  }
}
  1. Напишите функцию-ловушку, которая имеет доступ к функции отправки, которая выставляет функцию для отправки действий, которые, когда вы вызываете функцию-ловушку, отправляет действия редьюсерам, но это способ централизации бизнеса. что-то вроде этого:
import {useDispatch} from "react-redux";

function useAuthError() {
   const dispatch = useDispatch();

   function setError() {
      const networkError = {type: "network/singup/error"}
      const employer Error = {type: "employer/singup/error"}
      const userError = {type: "user/singup/error"}

      dispatch(networkError)
      dispatch(employer)
      dispatch(userError)
   };

   return {
      setError
   }
}
person Ali Torki    schedule 04.02.2020
comment
Это хорошее решение, но отправка нескольких действий не годится для такого рода вещей, скажем, у меня есть еще 10 состояний, тогда я должен отправить 10 действий. - person bews99; 04.02.2020
comment
вы правы, но редукс не может обновить несколько редукторов одним действием, вы знаете, в редуксе нет этой функции. - person Ali Torki; 04.02.2020

Один ответ можно найти здесь

На самом деле, когда произошел сбой сети, для меня нормально сбросить состояние приложения,

Итак, я сбросил состояние приложения в корневом редукторе.

const rootReducer = (state, action) => {
  if (action.type === 'NETWORK_ERROR') {
    state = undefined
  }
  return appReducer(state, action)
}

это сохранит состояние другого редуктора по умолчанию

person bews99    schedule 04.02.2020