React&Reducers:我可以从自身内部调用reducer吗?

时间:2020-10-29 11:03:22

标签: reactjs react-context reducers

小问题:

我可以从内部调用减速器吗? 假设我想从ACTION_2调用ACTION_1,这可能吗?

const reducer = (state, action) => {
  switch (action.type) {
    case 'ACTION_1':
      return {
        ...state,
        //......
      }
    break;

    case 'ACTION_2':
      var newState = {
        ...state,
        //.......
      }

      //I would like to call ACTION_1 here, and pass newState to it. Is it possible ?
      
 
    break;
  
    default:
      throw new Error();
  }

};

2 个答案:

答案 0 :(得分:0)

几种方法

  1. 发送新动作
case 'ACTION_2':
    // do something
    dispatch({ type: 'ACTION_1', payload })
  1. ACTION_1的主体提取为单独的函数,然后在两个函数上同时使用
case 'ACTION_1':
   return reduceACTION_1(...)
case 'ACTION_2':
   return reduceACTION_1(...)
  1. switch语句更改为if
if (action.type === 'ACTION_1' || action.type === 'ACTION_2') {
   // do something
}

但是,您有一个奇怪的用例。您可能会误解如何使用API​​来实现所需的功能。

答案 1 :(得分:0)

我建议您在调用some Action产生副作用之后再调用first Action

因此您可以明确地说,当我得到Action2时,我需要开除Action1作为该动作的副作用。

有用的副作用库,用于redux,并且用于侦听所有传入的动作,并且仅执行Action2,因此您可以使用side effect库中的redux-saga

您需要了解一些有关生成器以及库如何工作的知识,但是实现您想要的东西非常好。