UNPKG

think-react-store

Version:

基于react hooks 和 context 实现的类似与 redux 的数据流工具

42 lines 7.09 kB
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=5)}([ /*!*******************************!*\ !*** external "ramda/src/is" ***! \*******************************/ /*! no static exports found */ /*! exports used: default */ /*! ModuleConcatenation bailout: Module is not an ECMAScript module */function(e,t){e.exports=require("ramda/src/is")}, /*!************************!*\ !*** external "react" ***! \************************/ /*! no static exports found */ /*! exports used: default, useContext, useReducer */ /*! ModuleConcatenation bailout: Module is not an ECMAScript module */function(e,t){e.exports=require("react")}, /*!*************************************************!*\ !*** external "@babel/runtime/helpers/extends" ***! \*************************************************/ /*! no static exports found */ /*! exports used: default */ /*! ModuleConcatenation bailout: Module is not an ECMAScript module */function(e,t){e.exports=require("@babel/runtime/helpers/extends")}, /*!*********************************!*\ !*** external "ramda/src/path" ***! \*********************************/ /*! no static exports found */ /*! exports used: default */ /*! ModuleConcatenation bailout: Module is not an ECMAScript module */function(e,t){e.exports=require("ramda/src/path")}, /*!************************************!*\ !*** external "ramda/src/isEmpty" ***! \************************************/ /*! no static exports found */ /*! exports used: default */ /*! ModuleConcatenation bailout: Module is not an ECMAScript module */function(e,t){e.exports=require("ramda/src/isEmpty")}, /*!**********************************!*\ !*** ./src/index.js + 1 modules ***! \**********************************/ /*! exports provided: StoreContext, StoreProvider, useStateHook, useDispatchHook, useStoreHook, connect */ /*! all exports used */ /*! ModuleConcatenation bailout: Cannot concat with external "@babel/runtime/helpers/extends" (<- Module is not an ECMAScript module) */ /*! ModuleConcatenation bailout: Cannot concat with external "ramda/src/is" (<- Module is not an ECMAScript module) */ /*! ModuleConcatenation bailout: Cannot concat with external "ramda/src/isEmpty" (<- Module is not an ECMAScript module) */ /*! ModuleConcatenation bailout: Cannot concat with external "ramda/src/path" (<- Module is not an ECMAScript module) */ /*! ModuleConcatenation bailout: Cannot concat with external "react" (<- Module is not an ECMAScript module) */function(e,t,n){"use strict";n.r(t),n.d(t,"StoreContext",(function(){return m})),n.d(t,"StoreProvider",(function(){return P})),n.d(t,"useStateHook",(function(){return C})),n.d(t,"useDispatchHook",(function(){return S})),n.d(t,"useStoreHook",(function(){return F})),n.d(t,"connect",(function(){return _}));var r=n(2),o=n.n(r),c=n(1),u=n.n(c),i=n(0),f=n.n(i),a=n(3),s=n.n(a);function l(e,t){return s()(e,t)}function d(e){return!!e&&"AsyncFunction"===e.constructor.name}function y(e,t,n){return!!t&&(!!t[e]&&(!!t[e][n]||void 0))}function p(e,t=!0){if(!f()(Object,e))return{};let n={};return Object.keys(e).forEach(e=>{n[e]=t}),n}var b=n(4),h=n.n(b);const m=u.a.createContext(),j="hook-loading-clear";let v,k,x,O={},w={},E={};function g(e,t,n,r,o,c){let u;return t.forEach(t=>{l([e,t,n],r)&&(u=function(e,t,...n){const r=l(e,t);if(f()(Function,r))return r(...n)}([e,t,n],r,o,c))}),k=u,u}function P(e){var t,n;const{store:r,middleware:o}=e;if(!r)return console.error("\n store 必须有值,类似于:\n <StoreProvider store={store}>\n "),null;const i=null==o||null===(t=o.filter(e=>"loading"===e.name))||void 0===t?void 0:t.length;null==e||null===(n=e.cache)||void 0===n||n.length;if(i){h()(E)&&Object.keys(r).forEach(e=>{E[e]={...p(l([e,"methods"],r),!1),...p(l([e,"reducers"],r),!1),...p(l([e,"effects"],r),!1)}})}w=r,Object.keys(w).forEach(e=>{O[e]=w[e].state}),i&&!O.loading&&(O.loading=E);let[a,s]=Object(c.useReducer)((function(t,n){if(!n)return r;if(o&&!f()(Array,o))throw new Error("middleware中间件必须为数组");let c=function(e,t){const{key:n,type:r,payload:o}=t,c=n||v;return{...e,[c]:{...e[c],...g(c,["methods","reducers","effects"],r,w,e[c],o)}}}(t,n);return o&&o.forEach(o=>{const u=o(r,t,c,n,x,v,null==e?void 0:e.cache);u&&(c=u)}),c}),O);return u.a.createElement(m.Provider,{value:{state:a,dispatch:async(e,t,n)=>{if(x=void 0,l([v,"reducers",e.type],w))return s(e);if(!d(e)&&y("effects",w[e.key||v],e.type)){v=e.key,x=e.type,i&&s({key:v,type:j,payload:x});const t=l([e.key,"effects",e.type],w);return await t(s,a,e.payload)}if(d(e)||l([v,"effects",e],w))return v=n,x=e.name,i&&s({key:v,type:j,payload:e.name}),await e(s,a,t);if(!d(e)&&f()(Function,e)&&f()(Object,e())){const t=l([e().key,"methods",e().type],w)||l([e().key,"effects",e().type],w);if(f()(Function,t))return v=e().key,x=e().type,i&&s({key:v,type:j,payload:x}),await t(s,a,e().payload)}return s(e)}}},e.children)}function S(e){const t=Object(c.useContext)(m);return e&&(v=e),t.dispatch}function C(e){const t=Object(c.useContext)(m);return l(e?["state",e]:["state"],t)}function F(){const{state:e,dispatch:t}=Object(c.useContext)(m);let n={};return Object.keys(e).forEach(r=>{let o={};const c={...l([r,"methods"],w),...l([r,"reducers"],w),...l([r,"effects"],w)},u=c&&Object.keys(c);f()(Array,u)&&u.forEach(e=>{(d(c[e])||y("effects",w[r],e))&&(o[e]=async n=>{await t(c[e],n,r)}),!d(c[e])&&f()(Function,c[e])&&(o[e]=n=>{t({key:r,type:e,payload:n})})}),n[r]={...e[r],...o}}),n}function _(e,t){return function(n){return function(r){const i=F(),{state:a}=Object(c.useContext)(m),s=a;let l={};Object.keys(i).forEach(e=>{l[e]={},Object.keys(i[e]).forEach(t=>{f()(Function,i[e][t])&&(d(i[e][t])||y("effects",w[e],t)?l[e][t]=function(n,r,o){return new Promise(async(r,c)=>{try{await i[e][t](n,s,o),r(k)}catch(e){c(e)}})}:l[e][t]=function(n,r){return new Promise((o,c)=>{try{i[e][t](n,r),o(n)}catch(e){c(e)}})})})});const p=e(a),b=t(l);return u.a.createElement(n,o()({},p,b,r))}}}}])})); //# sourceMappingURL=index.min.js.map