import { useRef, useEffect, ForwardRefExoticComponent } from 'react'; import { Route, Routes, useLocation } from 'react-router-dom'; import { init, loadRemote } from '@module-federation/enhanced/runtime'; import { RetryPlugin } from '@module-federation/retry-plugin'; import { createRemoteComponent } from '@module-federation/bridge-react'; import Navigation from './navigation'; import Detail from './pages/Detail'; import Home from './pages/Home'; import './App.css'; import BridgeReactPlugin from '@module-federation/bridge-react/plugin'; init({ name: 'federation_consumer', remotes: [], plugins: [ BridgeReactPlugin(), RetryPlugin({ fetch: { url: 'http://localhost:2008/not-exist-mf-manifest.json', fallback: () => 'http://localhost:2001/mf-manifest.json', }, script: { retryTimes: 3, retryDelay: 1000, moduleName: ['remote1'], cb: (resolve, error) => { return setTimeout(() => { resolve(error); }, 1000); }, }, }), ], }); const FallbackErrorComp = (info: any) => { return (

This is ErrorBoundary Component

Something went wrong:

{info?.error.message}
); }; const FallbackComp =
loading...
; const Remote1App = createRemoteComponent({ loader: () => loadRemote('remote1/export-app'), fallback: FallbackErrorComp, loading: FallbackComp, }); const Remote2App = createRemoteComponent({ loader: () => import('remote2/export-app'), export: 'provider', fallback: FallbackErrorComp, loading: FallbackComp, }); const Remote3App = createRemoteComponent({ loader: () => loadRemote('remote3/export-app'), fallback: FallbackErrorComp, loading: FallbackComp, }); const RemoteRenderErrorApp = createRemoteComponent({ loader: () => loadRemote('remote-render-error/export-app'), fallback: FallbackErrorComp, loading: FallbackComp, }) as ForwardRefExoticComponent; const RemoteResourceErrorApp = createRemoteComponent({ loader: () => loadRemote('remote-resource-error/export-app'), fallback: FallbackErrorComp, loading: FallbackComp, }) as ForwardRefExoticComponent; function Wraper3() { return ( <>

Remote1

Remote2

Remote3

); } const App = () => { const location = useLocation(); const ref = useRef(null); useEffect(() => { const refTimeout = setTimeout(() => { if (ref && ref.current) { const div = document.createElement('h4'); div.append('Some text'); ref.current.append(div); } }, 1000); return () => { if (!location.pathname.includes('remote1')) { clearTimeout(refTimeout); } }; }, [location.pathname]); return (
} /> } /> } /> } /> } /> } />
); }; export default App;