use-reducer-effect
Version:
A tiny library that enables side effects with the useReducer hook
31 lines (26 loc) • 1.07 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var react = require('react');
function createSideEffectReducer(sideEffects) {
return (reducer, initialState, initializer) => {
return useReducerWithSideEffects(reducer, sideEffects, initialState, initializer);
};
}
function useReducerWithSideEffects(reducer, sideEffects, initialState, initializer) {
const currentAction = react.useRef(null);
const [state, dispatch] = react.useReducer((state, action) => {
const newState = reducer(state, action);
if (currentAction.current !== action) {
sideEffects(newState, action).then(newAction => {
if (!newAction)
return;
dispatch(newAction);
});
currentAction.current = action;
}
return newState;
}, initialState, initializer);
return [state, dispatch];
}
exports.createSideEffectReducer = createSideEffectReducer;
exports.useReducerWithSideEffects = useReducerWithSideEffects;
;