代码之家  ›  专栏  ›  技术社区  ›  Peter Kellner

想用useReducer添加第二个React reducer

  •  0
  • Peter Kellner  · 技术社区  · 3 年前

    我目前有一个reducer,它首先检查是否发送了SUCCESS或FAILURE作为操作。只有一次 loading 状态为假,我是否希望检查其他操作。我意识到下面的代码不太正确,但我只是想粘贴一些东西来了解我想要解决的问题。

    不知怎么的,我感觉所有的代码 if (state.loading === false) 可以换一个减速器,但我不知道该怎么做。我尝试了几种错误的方法,不断出现奇怪的错误。

    const dataLoadingReducer = (state, action) => {
      switch (action.type) {
        case 'FAILURE':
          return {...state,loading: true}
        case 'SUCCESS':
          return {...state, loading: false}
      }
      
      // only do the next set of dispatches if state.loading is true, otherwise ignore
      if (state.loading === false) {
        switch (action.type) {
          case 'SET_YEAR':
            return {...state, year: 'xxx'}
          case 'SHOW_SESSIONS':
            return {...state, year: '111'}
          case 'HIDE_SESSIONS':
            return {...state, year: '222'}
          case 'SHOW_FAVORITES':
            return {...state, year: '333'}
      
        }
      }
    };
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   Harley Thomas    3 年前

    你想要单独的减速器吗?如果是这样,请使用 combineReducers ( https://redux.js.org/api/combinereducers ).

    但是,当您分派一个操作时,例如 SET_YEAR 你应该期望这种行为得到一致的处理。减速器中不应出现次要、错误或有条件的行为。这可能会导致各种问题。如果由于以下值而不应发生该操作 loading 那么,从一开始就不应该采取这种行动。Redux reducer用于状态管理,而不是业务事件/规则的编排。

    推荐文章