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 (
<>
>
);
}
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;