randallknutson / redux-injector

Allows dynamically injecting reducers into a redux store at runtime
59 stars 14 forks source link

Utility function #7

Open waynepennington opened 7 years ago

waynepennington commented 7 years ago

Great job on redux-injector. Super useful. Here's an idea for a utility function to dynamically add reducers on the fly. I was shocked at how simple this was to do.

//used in conjunction with redux-injector
//given a plain object: reducer = {}
//the reducer factory enables adding reducer functions dynamically

export function ReducerFactory(initialStoreState, reducer) {
    return function reducerFunction(state = initialStoreState, action) {
        if (reducer[action.type]) {
            return reducer[action.type](state, action);
        } else {
            return state
        }
    }
}

/*EXAMPLE USE

import { ReducerFactory } from './reducerFactory'
import { injectReducer } from './redux-injector';

createReducers(propsID, initialStoreState) {
    reducer = {};
    injectReducer(propsID, ReducerFactory(initialStoreState, reducer));

    this.reducer[`${propsID}_SUCCESS`] = (state, action) => {
        return Object.assign({}, state, { error: null, isPending: false })
    }
    this.reducer[`${propsID}_PENDING`] = (state, action) => {
        return Object.assign({}, state, { isPending: true });
    }}
    this.reducer[`${propsID}_SUCCESS`] = (state, action) => {
        return Object.assign({}, state, { error: null, isPending: false, payload: action.payload })
    }
}
*/