UNPKG

use-reducer-effect

Version:

A tiny library that enables side effects with the useReducer hook

31 lines (26 loc) 1.07 kB
'use strict'; 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;