use-reducer-async
Version:
React useReducer with async actions
3 lines (2 loc) • 926 B
JavaScript
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],n):n((e||self).useReducerAsync={},e.React)}(this,function(e,n){var t="undefined"==typeof window||/ServerSideRendering/.test(window.navigator&&window.navigator.userAgent)?n.useEffect:n.useLayoutEffect;e.useReducerAsync=function(e,r,u,o){var c,f,i,a,s=(c=n.useState(function(){return new AbortController}),i=c[1],a=n.useRef(f=c[0]),n.useEffect(function(){return function(){a.current.abort(),a.current=new AbortController,i(a.current)}},[]),f.signal),d=o||u,l=n.useReducer(e,r,o&&u),p=l[0],g=l[1],y=n.useRef(p);t(function(){y.current=p},[p]);var b=n.useCallback(function(){return y.current},[]),w=n.useCallback(function(e){var n=(e||{}).type,t=n&&d[n]||null;t?t({dispatch:w,getState:b,signal:s})(e):g(e)},[d,b,s]);return[p,w]}});
//# sourceMappingURL=index.umd.js.map