iframe-micro-react-state
Version:
基于 iframe 的微应用状态管理与父应用通信工具,仅面向 React 项目生态。
1 lines • 818 B
JavaScript
import{useEffect as e,useState as t}from"react";var n=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 r=()=>n.getInstance();function i(e){r().handleMessage(e)}function a(){let[n,a]=t(()=>r().getState());return e(()=>{function e(e){i(e),a(r().getState())}return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[]),n}function o(e){let t=a(),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)))}export{o as useAuthorityChecker,a as useMicroAppState};