在 redux 状态下更新每个对象中的特定 属性

Update a specific property in each object in redux state

我想在 redux 状态的每个对象中更新特定的 属性,并假设我有这种主状态

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

假设我遇到了网络故障,那么 networkFailure 状态变为 true ,因此我需要 fail(false ) 加载 signUp employer 状态和所有加载状态到 false 其他对象的值

是否可以在一个减速器中做到这一点?或者有什么更好的建议吗? 我为雇主、用户和网络设置了 3 个 reducer 函数

我认为有两种方式: 1. 使用 redux-thunk 并分派一个动作,然后在动作函数中分派 3 个动作,其中 return 将函数分派到 you.something,如下所示:

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. 写一个hook函数,它可以访问dispatch函数,dispatch函数暴露函数来dispatch actions,当你调用hook function时,它会向reducer派发actions,但这是一种集中业务的方式。像这样:
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
   }
}

一个答案来自

其实当网络出现故障时,对我来说重置应用程序状态就可以了,

所以我在根减速器中重置了应用程序状态

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

这会将其他 reducer 的状态保持为默认状态