UNPKG

use-reducer-effect

Version:

A tiny library that enables side effects with the useReducer hook

26 lines (23 loc) 936 B
import { useRef, useReducer } from 'react'; function createSideEffectReducer(sideEffects) { return (reducer, initialState, initializer) => { return useReducerWithSideEffects(reducer, sideEffects, initialState, initializer); }; } function useReducerWithSideEffects(reducer, sideEffects, initialState, initializer) { const currentAction = useRef(null); const [state, dispatch] = 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]; } export { createSideEffectReducer, useReducerWithSideEffects };