Redux 向减速器工厂实例添加专用功能

Redux 向减速器工厂实例添加专用功能,redux,factory,Redux,Factory,为了减少我的应用程序中与redux相关的部分中的代码重复,我提出了reducer工厂,以便将重复逻辑分组成一个抽象的reducer,然后通过向工厂传递nameparam将其转换为具体的reducer实例 ReduxFactory/reducer.js const initialState = { foo: null } function reducerFactory(name = '') { return function reducer(state = initialStat

为了减少我的应用程序中与redux相关的部分中的代码重复,我提出了reducer工厂,以便将重复逻辑分组成一个抽象的reducer,然后通过向工厂传递
name
param将其转换为具体的reducer实例

ReduxFactory/reducer.js

const initialState = {
    foo: null
}

function reducerFactory(name = '') {
    return function reducer(state = initialState, action) {
        switch (action.type) {
            
            case `${name}_DO_SOMETHING`: {
                 return state
            }

            default:
                return state;
        }
    }
}

export default reducerFactory;
然后,我为两个模块构建了减速器工厂的实例:

fileA.js

import reducerFactory from './ReduxFactory/reducer'


const reducer = reducerFactory('OBJECT_A')
fileB.js

import reducerFactory from './ReduxFactory/reducer'


const reducer = reducerFactory('OBJECT_B')

现在想象一下,在类型B的对象上,我需要实现一些特殊的功能,我不想将这些功能包含在通用的reducer factory主体中,因为它太专业化了。是否有任何有效的JS代码模式来实现此功能?

如果我理解正确,我认为您可以执行以下操作:

function reducerFactory(name = '', extras = (x) => x) {
  return function reducer(state = initialState, action) {
    switch (action.type) {
      case `${name}_DO_SOMETHING`: {
        return state;
      }

      default:
        return extras(state, action);
    }
  };
}

const reducer = reducerFactory(
  'OBJECT_B',
  (state, action) => {
    if (action.type === 'extra') {
      //return changed state
    }
    return state;
  }
);