iframe-micro-react-state
Version:
基于 iframe 的微应用状态管理与父应用通信工具,仅面向 React 项目生态。
1 lines • 1.3 kB
JavaScript
var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));const c=s(require(`react`));var l=class e{static instance;state;constructor(){}static getInstance(){return this.instance||=new e,this.instance}getState(){return this.state}setState(e){this.state=e}handleMessage(e){try{let{type:t,data:n}=e.data;t===`MICRO_APP_INIT_DATA`&&this.setState({initialized:!0,initTime:Date.now(),data:n})}catch{}}};const u=()=>l.getInstance();function d(e){u().handleMessage(e)}function f(){let[e,t]=(0,c.useState)(()=>u().getState());return(0,c.useEffect)(()=>{function e(e){d(e),t(u().getState())}return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[]),e}function p(e){let t=f(),n=t?.data?.authorityList;if(!n||n.length===0)return!1;let r=Array.isArray(e)?e:[e];return r.some(e=>n.some(t=>t.includes(e)))}exports.useAuthorityChecker=p,exports.useMicroAppState=f;