UNPKG

react-async-saga-reducer

Version:

Use redux saga with useReducer hook to handle side effects without Redux

31 lines (30 loc) 1.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useAsyncSagaReducer = void 0; var React = require("react"); var redux_saga_1 = require("redux-saga"); exports.useAsyncSagaReducer = function (reducer, saga, initialState) { var _a = React.useReducer(reducer, initialState), state = _a[0], reactDispatch = _a[1]; var stateRef = React.useRef(state); React.useEffect(function () { stateRef.current = state; }, [state]); var sagaChannel = React.useMemo(function () { var channel = redux_saga_1.stdChannel(); var dispatch = function (action) { reactDispatch(action); Promise.resolve().then(function () { channel.put(action); }); }; var getState = function () { return stateRef.current; }; return { channel: channel, dispatch: dispatch, getState: getState }; }, []); React.useEffect(function () { var task = redux_saga_1.runSaga(sagaChannel, saga); return function () { task.cancel(); }; }, [sagaChannel]); return [state, sagaChannel.dispatch]; };