How to use material-ui's Autocomplete component when using a react CDN - reactjs

I am able to use the [TextField, Checkbox, Button . .] etc components but unable to render the Autocomplete component from the lab material-ui package.
Here's how I'm adding React and material-ui to my page / file.
<div id="app"></div>
<script src="https://unpkg.com/react#17/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom#17/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/#material-ui/core#latest/umd/material-ui.development.js"></script>
<script src="https://unpkg.com/#babel/standalone/babel.min.js"></script>
<sript src="https://unpkg.com/#material-ui/lab#4.0.0-alpha.58/index.js"></sript>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
React code:
<script type="text/babel">
//React hooks
const {useState, useEffect} = React;
// Material-ui Components
const {
Button,
Checkbox,
Autocomplete,
TextField,
} = MaterialUI;
const Current_system = [
{ title: "Abdifatah" },
{ title: "Arneau" },
{ title: "Ben" },
];
function CheckboxesTags() {
return (
<Autocomplete
multiple
options={Current_system}
disableCloseOnSelect
getOptionLabel={(option) => option.title}
renderOption={(option, { selected }) => (
<React.Fragment>
<Checkbox checked={selected} />
{option.title}
</React.Fragment>
)}
style={{ width: 500 }}
renderInput={(params) => (
<TextField
{...params}
variant="outlined"
label="System"
placeholder="Search"
/>
)}
/>
);
}
function App() {
return (
<div >
<Button>Button from MUI</Button>
<br/>
<TextField />
<CheckboxesTags />
</div>
);
}
ReactDOM.render(<App />, document.getElementById('app'));
</script>
Screenshot of the button and textfield components being rendered:
The Autocomplete components works when I import MUI-lab like the below but not with CDN.
This will work when doing it on codesandbox or using create-react-app::
import Autocomplete from "#material-ui/lab/Autocomplete";
Codesandbox example
This is the error I get on the console:
react.development.js:245
Warning: React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
Check the render method of `CheckboxesTags`.
at CheckboxesTags
at div
at App
printWarning # react.development.js:245
error # react.development.js:221
createElementWithValidation # react.development.js:2240
CheckboxesTags # Inline Babel script:22
renderWithHooks # react-dom.development.js:15015
mountIndeterminateComponent # react-dom.development.js:17841
beginWork # react-dom.development.js:19079
beginWork$1 # react-dom.development.js:23970
performUnitOfWork # react-dom.development.js:22806
workLoopSync # react-dom.development.js:22737
renderRootSync # react-dom.development.js:22700
performSyncWorkOnRoot # react-dom.development.js:22323
scheduleUpdateOnFiber # react-dom.development.js:21911
updateContainer # react-dom.development.js:25512
(anonymous) # react-dom.development.js:26051
unbatchedUpdates # react-dom.development.js:22461
legacyRenderSubtreeIntoContainer # react-dom.development.js:26050
render # react-dom.development.js:26133
(anonymous) # Inline Babel script:57
yq # babel.min.js:13
s # babel.min.js:13
vq # babel.min.js:13
(anonymous) # babel.min.js:13
Fq # babel.min.js:13
Iq # babel.min.js:13
react.development.js:245 Warning:
React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
Check the render method of `CheckboxesTags`.
at CheckboxesTags
at div
at App
printWarning # react.development.js:245
error # react.development.js:221
createElementWithValidation # react.development.js:2240
CheckboxesTags # Inline Babel script:22
renderWithHooks # react-dom.development.js:15015
mountIndeterminateComponent # react-dom.development.js:17841
beginWork # react-dom.development.js:19079
callCallback # react-dom.development.js:3942
invokeGuardedCallbackDev # react-dom.development.js:3991
invokeGuardedCallback # react-dom.development.js:4053
beginWork$1 # react-dom.development.js:23994
performUnitOfWork # react-dom.development.js:22806
workLoopSync # react-dom.development.js:22737
renderRootSync # react-dom.development.js:22700
performSyncWorkOnRoot # react-dom.development.js:22323
scheduleUpdateOnFiber # react-dom.development.js:21911
updateContainer # react-dom.development.js:25512
(anonymous) # react-dom.development.js:26051
unbatchedUpdates # react-dom.development.js:22461
legacyRenderSubtreeIntoContainer # react-dom.development.js:26050
render # react-dom.development.js:26133
(anonymous) # Inline Babel script:57
yq # babel.min.js:13
s # babel.min.js:13
vq # babel.min.js:13
(anonymous) # babel.min.js:13
Fq # babel.min.js:13
Iq # babel.min.js:13
react-dom.development.js:25088 Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.
Check the render method of `CheckboxesTags`.
at createFiberFromTypeAndProps (react-dom.development.js:25088)
at createFiberFromElement (react-dom.development.js:25116)
at reconcileSingleElement (react-dom.development.js:14082)
at reconcileChildFibers (react-dom.development.js:14142)
at reconcileChildren (react-dom.development.js:17020)
at mountIndeterminateComponent (react-dom.development.js:17920)
at beginWork (react-dom.development.js:19079)
at HTMLUnknownElement.callCallback (react-dom.development.js:3942)
at Object.invokeGuardedCallbackDev (react-dom.development.js:3991)
at invokeGuardedCallback (react-dom.development.js:4053)
createFiberFromTypeAndProps # react-dom.development.js:25088
createFiberFromElement # react-dom.development.js:25116
reconcileSingleElement # react-dom.development.js:14082
reconcileChildFibers # react-dom.development.js:14142
reconcileChildren # react-dom.development.js:17020
mountIndeterminateComponent # react-dom.development.js:17920
beginWork # react-dom.development.js:19079
callCallback # react-dom.development.js:3942
invokeGuardedCallbackDev # react-dom.development.js:3991
invokeGuardedCallback # react-dom.development.js:4053
beginWork$1 # react-dom.development.js:23994
performUnitOfWork # react-dom.development.js:22806
workLoopSync # react-dom.development.js:22737
renderRootSync # react-dom.development.js:22700
performSyncWorkOnRoot # react-dom.development.js:22323
scheduleUpdateOnFiber # react-dom.development.js:21911
updateContainer # react-dom.development.js:25512
(anonymous) # react-dom.development.js:26051
unbatchedUpdates # react-dom.development.js:22461
legacyRenderSubtreeIntoContainer # react-dom.development.js:26050
render # react-dom.development.js:26133
(anonymous) # Inline Babel script:57
yq # babel.min.js:13
s # babel.min.js:13
vq # babel.min.js:13
(anonymous) # babel.min.js:13
Fq # babel.min.js:13
Iq # babel.min.js:13
react-dom.development.js:20115
The above error occurred in the <CheckboxesTags> component:
at CheckboxesTags
at div
at App
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.
logCapturedError # react-dom.development.js:20115
update.callback # react-dom.development.js:20148
callCallback # react-dom.development.js:12348
commitUpdateQueue # react-dom.development.js:12369
commitLifeCycles # react-dom.development.js:20766
commitLayoutEffects # react-dom.development.js:23456
callCallback # react-dom.development.js:3942
invokeGuardedCallbackDev # react-dom.development.js:3991
invokeGuardedCallback # react-dom.development.js:4053
commitRootImpl # react-dom.development.js:23181
unstable_runWithPriority # react.development.js:2764
runWithPriority$1 # react-dom.development.js:11306
commitRoot # react-dom.development.js:23020
performSyncWorkOnRoot # react-dom.development.js:22359
scheduleUpdateOnFiber # react-dom.development.js:21911
updateContainer # react-dom.development.js:25512
(anonymous) # react-dom.development.js:26051
unbatchedUpdates # react-dom.development.js:22461
legacyRenderSubtreeIntoContainer # react-dom.development.js:26050
render # react-dom.development.js:26133
(anonymous) # Inline Babel script:57
yq # babel.min.js:13
s # babel.min.js:13
vq # babel.min.js:13
(anonymous) # babel.min.js:13
Fq # babel.min.js:13
Iq # babel.min.js:13
react-dom.development.js:4002 Uncaught Error: A cross-origin error was thrown. React doesn't have access to the actual error object in development. See https://reactjs.org/link/crossorigin-error for more information.
at Object.invokeGuardedCallbackDev (react-dom.development.js:4002)
at invokeGuardedCallback (react-dom.development.js:4053)
at beginWork$1 (react-dom.development.js:23994)
at performUnitOfWork (react-dom.development.js:22806)
at workLoopSync (react-dom.development.js:22737)
at renderRootSync (react-dom.development.js:22700)
at performSyncWorkOnRoot (react-dom.development.js:22323)
at scheduleUpdateOnFiber (react-dom.development.js:21911)
at updateContainer (react-dom.development.js:25512)
at react-dom.development.js:26051
How can I achieve this?

Related

Next.js 13 throws 3 errors out of the box after starting a new project

It's my first time working with a technology in beta so maybe this is to be expected and I should just ignore these erros for now?
I'm also extremely new to Next.js.
I've ran npx create-next-app#latest front --typescript - to create a new directory for my app code (will keep my API separated as there's also an electron app that needs to communicate with it).
I chose no for using the src/ directory.
I chose yes for the experimental /app directory.
I simply clicked enter and skipped when asked about configuring an import alias.
When the project was built, I ran npm run dev and I am getting 3 errors out of the box.
Errors are-
Two of this:
Error: Hydration failed because the initial UI does not match what was rendered on the server.
Warning: Expected server HTML to contain a matching <main> in <body>.
See more info here: https://nextjs.org/docs/messages/react-hydration-error
One of this:
Error: There was an error while hydrating. Because the error happened outside of a Suspense boundary, the entire root will switch to client rendering.
This is the complete log from the console:
at main
at ScrollAndFocusHandler (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:149:1)
at InnerLayoutRouter (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:178:11)
at RedirectErrorBoundary (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:334:9)
at RedirectBoundary (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:341:11)
at NotFoundErrorBoundary (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:370:9)
at NotFoundBoundary (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:377:11)
at LoadingBoundary (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:289:11)
at ErrorBoundary (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/error-boundary.js:76:11)
at RenderFromTemplateContext (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/render-from-template-context.js:12:34)
at OuterLayoutRouter (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/layout-router.js:20:11)
at body
at html
at ReactDevOverlay (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/react-dev-overlay/internal/ReactDevOverlay.js:58:9)
at HotReload (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/react-dev-overlay/hot-reloader-client.js:19:11)
at Router (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/app-router.js:99:11)
at ErrorBoundaryHandler (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/error-boundary.js:63:9)
at ErrorBoundary (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/error-boundary.js:76:11)
at AppRouter (webpack-internal:///(app-client)/./node_modules/next/dist/client/components/app-router.js:20:13)
at ServerRoot (webpack-internal:///(app-client)/./node_modules/next/dist/client/app-index.js:126:11)
at RSCComponent
at Root (webpack-internal:///(app-client)/./node_modules/next/dist/client/app-index.js:143:11)
overrideMethod # react_devtools_backend.js:4012
console.error # hydration-error-info.js?32aa:24
printWarning # react-dom.development.js?d37d:94
error # react-dom.development.js?d37d:68
warnForInsertedHydratedElement # react-dom.development.js?d37d:10659
didNotFindHydratableInstance # react-dom.development.js?d37d:13436
warnNonhydratedInstance # react-dom.development.js?d37d:14601
tryToClaimNextHydratableInstance # react-dom.development.js?d37d:14775
updateHostComponent # react-dom.development.js?d37d:23001
beginWork # react-dom.development.js?d37d:24831
beginWork$1 # react-dom.development.js?d37d:32185
performUnitOfWork # react-dom.development.js?d37d:31082
workLoopConcurrent # react-dom.development.js?d37d:31068
renderRootConcurrent # react-dom.development.js?d37d:31026
performConcurrentWorkOnRoot # react-dom.development.js?d37d:29983
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
react-dom.development.js?d37d:14726 Uncaught Error: Hydration failed because the initial UI does not match what was rendered on the server.
at throwOnHydrationMismatch (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14726:9)
at tryToClaimNextHydratableInstance (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14776:7)
at updateHostComponent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:22996:5)
at beginWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:24826:14)
at HTMLUnknownElement.callCallback (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:4246:14)
at Object.invokeGuardedCallbackDev (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:4295:16)
at invokeGuardedCallback (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:4359:31)
at beginWork$1 (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:32202:7)
at performUnitOfWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31077:12)
at workLoopConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31063:5)
at renderRootConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31021:7)
at performConcurrentWorkOnRoot (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:29978:38)
at workLoop (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3897)
at flushWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3606)
at MessagePort.performWorkUntilDeadline (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:1787)
throwOnHydrationMismatch # react-dom.development.js?d37d:14726
tryToClaimNextHydratableInstance # react-dom.development.js?d37d:14776
updateHostComponent # react-dom.development.js?d37d:23001
beginWork # react-dom.development.js?d37d:24831
callCallback # react-dom.development.js?d37d:4246
invokeGuardedCallbackDev # react-dom.development.js?d37d:4295
invokeGuardedCallback # react-dom.development.js?d37d:4359
beginWork$1 # react-dom.development.js?d37d:32207
performUnitOfWork # react-dom.development.js?d37d:31082
workLoopConcurrent # react-dom.development.js?d37d:31068
renderRootConcurrent # react-dom.development.js?d37d:31026
performConcurrentWorkOnRoot # react-dom.development.js?d37d:29983
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
react_devtools_backend.js:4012 Warning: An error occurred during hydration. The server HTML was replaced with client content in <#document>.
overrideMethod # react_devtools_backend.js:4012
console.error # hydration-error-info.js?32aa:24
printWarning # react-dom.development.js?d37d:94
error # react-dom.development.js?d37d:68
errorHydratingContainer # react-dom.development.js?d37d:13451
recoverFromConcurrentError # react-dom.development.js?d37d:30105
performConcurrentWorkOnRoot # react-dom.development.js?d37d:29996
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
react_devtools_backend.js:4012 Warning: You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is deprecated and will be removed in a future version of React. To access the digest of an Error look for this property on the Error instance itself.
overrideMethod # react_devtools_backend.js:4012
console.error # hydration-error-info.js?32aa:24
printWarning # react-dom.development.js?d37d:94
error # react-dom.development.js?d37d:68
get # react-dom.development.js?d37d:31630
onRecoverableError # on-recoverable-error.js?eb92:8
commitRootImpl # react-dom.development.js?d37d:31567
commitRoot # react-dom.development.js?d37d:31330
finishConcurrentRender # react-dom.development.js?d37d:30263
performConcurrentWorkOnRoot # react-dom.development.js?d37d:30055
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
on-recoverable-error.js?eb92:17 Uncaught Error: Hydration failed because the initial UI does not match what was rendered on the server.
at throwOnHydrationMismatch (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14726:9)
at tryToClaimNextHydratableInstance (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14776:7)
at updateHostComponent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:22996:5)
at beginWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:24826:14)
at beginWork$1 (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:32180:14)
at performUnitOfWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31077:12)
at workLoopConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31063:5)
at renderRootConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31021:7)
at performConcurrentWorkOnRoot (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:29978:38)
at workLoop (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3897)
at flushWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3606)
at MessagePort.performWorkUntilDeadline (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:1787)
throwOnHydrationMismatch # react-dom.development.js?d37d:14726
tryToClaimNextHydratableInstance # react-dom.development.js?d37d:14776
updateHostComponent # react-dom.development.js?d37d:23001
beginWork # react-dom.development.js?d37d:24831
beginWork$1 # react-dom.development.js?d37d:32185
performUnitOfWork # react-dom.development.js?d37d:31082
workLoopConcurrent # react-dom.development.js?d37d:31068
renderRootConcurrent # react-dom.development.js?d37d:31026
performConcurrentWorkOnRoot # react-dom.development.js?d37d:29983
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
react_devtools_backend.js:4012 Warning: You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is deprecated and will be removed in a future version of React. To access the digest of an Error look for this property on the Error instance itself.
overrideMethod # react_devtools_backend.js:4012
console.error # hydration-error-info.js?32aa:24
printWarning # react-dom.development.js?d37d:94
error # react-dom.development.js?d37d:68
get # react-dom.development.js?d37d:31630
onRecoverableError # on-recoverable-error.js?eb92:8
commitRootImpl # react-dom.development.js?d37d:31567
commitRoot # react-dom.development.js?d37d:31330
finishConcurrentRender # react-dom.development.js?d37d:30263
performConcurrentWorkOnRoot # react-dom.development.js?d37d:30055
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
on-recoverable-error.js?eb92:17 Uncaught Error: Hydration failed because the initial UI does not match what was rendered on the server.
at throwOnHydrationMismatch (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14726:9)
at tryToClaimNextHydratableInstance (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14776:7)
at updateHostComponent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:22996:5)
at beginWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:24826:14)
at beginWork$1 (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:32180:14)
at performUnitOfWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31077:12)
at workLoopConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31063:5)
at renderRootConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31021:7)
at performConcurrentWorkOnRoot (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:29978:38)
at workLoop (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3897)
at flushWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3606)
at MessagePort.performWorkUntilDeadline (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:1787)
throwOnHydrationMismatch # react-dom.development.js?d37d:14726
tryToClaimNextHydratableInstance # react-dom.development.js?d37d:14776
updateHostComponent # react-dom.development.js?d37d:23001
beginWork # react-dom.development.js?d37d:24831
beginWork$1 # react-dom.development.js?d37d:32185
performUnitOfWork # react-dom.development.js?d37d:31082
workLoopConcurrent # react-dom.development.js?d37d:31068
renderRootConcurrent # react-dom.development.js?d37d:31026
performConcurrentWorkOnRoot # react-dom.development.js?d37d:29983
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
react_devtools_backend.js:4012 Warning: You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is deprecated and will be removed in a future version of React. To access the digest of an Error look for this property on the Error instance itself.
overrideMethod # react_devtools_backend.js:4012
console.error # hydration-error-info.js?32aa:24
printWarning # react-dom.development.js?d37d:94
error # react-dom.development.js?d37d:68
get # react-dom.development.js?d37d:31630
onRecoverableError # on-recoverable-error.js?eb92:8
commitRootImpl # react-dom.development.js?d37d:31567
commitRoot # react-dom.development.js?d37d:31330
finishConcurrentRender # react-dom.development.js?d37d:30263
performConcurrentWorkOnRoot # react-dom.development.js?d37d:30055
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
on-recoverable-error.js?eb92:17 Uncaught Error: Hydration failed because the initial UI does not match what was rendered on the server.
at throwOnHydrationMismatch (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14726:9)
at tryToClaimNextHydratableInstance (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:14776:7)
at updateHostComponent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:22996:5)
at beginWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:24826:14)
at beginWork$1 (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:32180:14)
at performUnitOfWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31077:12)
at workLoopConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31063:5)
at renderRootConcurrent (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31021:7)
at performConcurrentWorkOnRoot (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:29978:38)
at workLoop (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3897)
at flushWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3606)
at MessagePort.performWorkUntilDeadline (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:1787)
throwOnHydrationMismatch # react-dom.development.js?d37d:14726
tryToClaimNextHydratableInstance # react-dom.development.js?d37d:14776
updateHostComponent # react-dom.development.js?d37d:23001
beginWork # react-dom.development.js?d37d:24831
beginWork$1 # react-dom.development.js?d37d:32185
performUnitOfWork # react-dom.development.js?d37d:31082
workLoopConcurrent # react-dom.development.js?d37d:31068
renderRootConcurrent # react-dom.development.js?d37d:31026
performConcurrentWorkOnRoot # react-dom.development.js?d37d:29983
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
react_devtools_backend.js:4012 Warning: You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is deprecated and will be removed in a future version of React. To access the digest of an Error look for this property on the Error instance itself.
overrideMethod # react_devtools_backend.js:4012
console.error # hydration-error-info.js?32aa:24
printWarning # react-dom.development.js?d37d:94
error # react-dom.development.js?d37d:68
get # react-dom.development.js?d37d:31630
onRecoverableError # on-recoverable-error.js?eb92:8
commitRootImpl # react-dom.development.js?d37d:31567
commitRoot # react-dom.development.js?d37d:31330
finishConcurrentRender # react-dom.development.js?d37d:30263
performConcurrentWorkOnRoot # react-dom.development.js?d37d:30055
workLoop # index.js?91dc:10
flushWork # index.js?91dc:10
performWorkUntilDeadline # index.js?91dc:10
react-dom.development.js?d37d:22948 Uncaught Error: There was an error while hydrating. Because the error happened outside of a Suspense boundary, the entire root will switch to client rendering.
at updateHostRoot (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:22943:57)
at beginWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:24809:14)
at beginWork$1 (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:32180:14)
at performUnitOfWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:31077:12)
at workLoopSync (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:30886:5)
at renderRootSync (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:30851:7)
at recoverFromConcurrentError (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:30104:20)
at performConcurrentWorkOnRoot (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/react-dom/cjs/react-dom.development.js:29991:22)
at workLoop (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3897)
at flushWork (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:3606)
at MessagePort.performWorkUntilDeadline (webpack-internal:///(:3000/app-client)/./node_modules/next/dist/compiled/scheduler/index.js:11:1787)```

How to create micro frontends based on different technologies using a common shell with module federation and NX?

I'm trying to create micro frontends with React and Angular (the remotes) that are used within a shell application based on React (the host/shell) using Webpacks Module Federation.
Therefore I used this official documentation provided by NX --> Advanced Angular Micro Frontends with Dynamic Module Federation
Here is what I did:
1. npx create-nx-workspace pace-microfrontends
2. npm install #nrwl/react --save-dev
3. npm install #nrwl/angular --save-dev
4. npx nx g #nrwl/react:host shell
5. npx nx g #nrwl/angular:remote angular-microfrontend --host=shell
6. npx nx g #nrwl/react:remote react-microfrontend --host=shell
So I created a fresh NX workspace, added the missing dependencies, generated the shell/host application based on React and added two micro frontends (one based on React, one based on Angular) that should be hosted within the shell.
After that it was needed to add the missing routing to the Angular micro frontend within the shell, because it was not generated by NX like for the React micro frontend, like this:
apps/shell/src/app/app.tsx
import * as React from 'react';
import NxWelcome from './nx-welcome';
import { Link, Route, Routes } from 'react-router-dom';
const ReactMicrofrontend = React.lazy(
() => import('react-microfrontend/Module')
);
const AngularMicrofrontend = React.lazy(
() => import('angular-microfrontend/Module')
);
export function App() {
return (
<React.Suspense fallback={null}>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/react-microfrontend">ReactMicrofrontend</Link>
</li>
<li>
<Link to="/angular-microfrontend">AngularMicrofrontend</Link>
</li>
</ul>
<Routes>
<Route path="/" element={<NxWelcome title="shell" />} />
<Route path="/react-microfrontend" element={<ReactMicrofrontend />} />
<Route
path="/angular-microfrontend"
element={<AngularMicrofrontend />}
/>
</Routes>
</React.Suspense>
);
}
export default App;
Since the module federation configuration was not right as well (it couldn't find the remoteEntry.js file), I also had to change it from this:
apps/shell/module-federation.config.js
// #ts-check
/**
* #type {import('#nrwl/devkit').ModuleFederationConfig}
**/
const moduleFederationConfig = {
name: 'shell',
remotes: [react-microfrontend'],
};
module.exports = moduleFederationConfig;
..to this:
apps/shell/module-federation.config.js
// #ts-check
/**
* #type {import('#nrwl/devkit').ModuleFederationConfig}
**/
const moduleFederationConfig = {
name: 'shell',
remotes: [
['angular-microfrontend', 'http://localhost:4201/remoteEntry.mjs'],
['react-microfrontend', 'http://localhost:4202/remoteEntry.js'],
],
};
module.exports = moduleFederationConfig;
After these adjustments it was possible to start the shell application with npm start.
The routing for Home and ReactMicrofrontend works fine but as soon as I click on AngularMicrofrontend I get the following errors:
react_devtools_backend.js:4012 Warning: lazy: Expected the result of a
dynamic import() call. Instead received: [object Module]
Your code should look like: const MyComponent = lazy(() =>
import('./MyComponent'))
at RenderedRoute (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:4840:5)
at Routes (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5272:5)
at Suspense
at App
at Router (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5204:15)
at BrowserRouter (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:3464:5)
overrideMethod # react_devtools_backend.js:4012 printWarning #
react.development.js:209 error # react.development.js:183
lazyInitializer # react.development.js:1400 resolveLazy #
react-dom.development.js:14907 reconcileSingleElement #
react-dom.development.js:15718 reconcileChildFibers #
react-dom.development.js:15808 reconcileChildren #
react-dom.development.js:19174 updateContextProvider #
react-dom.development.js:21154 beginWork #
react-dom.development.js:21649 beginWork$1 #
react-dom.development.js:27426 performUnitOfWork #
react-dom.development.js:26557 workLoopConcurrent #
react-dom.development.js:26543 renderRootConcurrent #
react-dom.development.js:26505 performConcurrentWorkOnRoot #
react-dom.development.js:25738 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react_devtools_backend.js:4012
Warning: lazy: Expected the result of a dynamic import() call. Instead
received: [object Module]
Your code should look like: const MyComponent = lazy(() =>
import('./MyComponent'))
at Lazy
at RenderedRoute (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:4840:5)
at Routes (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5272:5)
at Suspense
at App
at Router (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5204:15)
at BrowserRouter (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:3464:5)
overrideMethod # react_devtools_backend.js:4012 printWarning #
react.development.js:209 error # react.development.js:183
lazyInitializer # react.development.js:1400 mountLazyComponent #
react-dom.development.js:19944 beginWork #
react-dom.development.js:21593 beginWork$1 #
react-dom.development.js:27426 performUnitOfWork #
react-dom.development.js:26557 workLoopConcurrent #
react-dom.development.js:26543 renderRootConcurrent #
react-dom.development.js:26505 performConcurrentWorkOnRoot #
react-dom.development.js:25738 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react_devtools_backend.js:4012
Warning: lazy: Expected the result of a dynamic import() call. Instead
received: [object Module]
Your code should look like: const MyComponent = lazy(() =>
import('./MyComponent'))
at Lazy
at RenderedRoute (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:4840:5)
at Routes (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5272:5)
at Suspense
at App
at Router (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5204:15)
at BrowserRouter (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:3464:5)
overrideMethod # react_devtools_backend.js:4012 printWarning #
react.development.js:209 error # react.development.js:183
lazyInitializer # react.development.js:1400 mountLazyComponent #
react-dom.development.js:19944 beginWork #
react-dom.development.js:21593 callCallback #
react-dom.development.js:4164 invokeGuardedCallbackDev #
react-dom.development.js:4213 invokeGuardedCallback #
react-dom.development.js:4277 beginWork$1 #
react-dom.development.js:27451 performUnitOfWork #
react-dom.development.js:26557 workLoopConcurrent #
react-dom.development.js:26543 renderRootConcurrent #
react-dom.development.js:26505 performConcurrentWorkOnRoot #
react-dom.development.js:25738 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react-dom.development.js:20013
Uncaught Error: Element type is invalid. Received a promise that
resolves to: undefined. Lazy element type must resolve to a class or
function.
at mountLazyComponent (react-dom.development.js:20013:1)
at beginWork (react-dom.development.js:21593:1)
at HTMLUnknownElement.callCallback (react-dom.development.js:4164:1)
at Object.invokeGuardedCallbackDev (react-dom.development.js:4213:1)
at invokeGuardedCallback (react-dom.development.js:4277:1)
at beginWork$1 (react-dom.development.js:27451:1)
at performUnitOfWork (react-dom.development.js:26557:1)
at workLoopConcurrent (react-dom.development.js:26543:1)
at renderRootConcurrent (react-dom.development.js:26505:1)
at performConcurrentWorkOnRoot (react-dom.development.js:25738:1) mountLazyComponent # react-dom.development.js:20013 beginWork #
react-dom.development.js:21593 callCallback #
react-dom.development.js:4164 invokeGuardedCallbackDev #
react-dom.development.js:4213 invokeGuardedCallback #
react-dom.development.js:4277 beginWork$1 #
react-dom.development.js:27451 performUnitOfWork #
react-dom.development.js:26557 workLoopConcurrent #
react-dom.development.js:26543 renderRootConcurrent #
react-dom.development.js:26505 performConcurrentWorkOnRoot #
react-dom.development.js:25738 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react_devtools_backend.js:4012
Warning: lazy: Expected the result of a dynamic import() call. Instead
received: [object Module]
Your code should look like: const MyComponent = lazy(() =>
import('./MyComponent'))
at RenderedRoute (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:4840:5)
at Routes (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5272:5)
at Suspense
at App
at Router (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5204:15)
at BrowserRouter (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:3464:5)
overrideMethod # react_devtools_backend.js:4012 printWarning #
react.development.js:209 error # react.development.js:183
lazyInitializer # react.development.js:1400 resolveLazy #
react-dom.development.js:14907 reconcileSingleElement #
react-dom.development.js:15718 reconcileChildFibers #
react-dom.development.js:15808 reconcileChildren #
react-dom.development.js:19174 updateContextProvider #
react-dom.development.js:21154 beginWork #
react-dom.development.js:21649 beginWork$1 #
react-dom.development.js:27426 performUnitOfWork #
react-dom.development.js:26557 workLoopSync #
react-dom.development.js:26466 renderRootSync #
react-dom.development.js:26434 recoverFromConcurrentError #
react-dom.development.js:25850 performConcurrentWorkOnRoot #
react-dom.development.js:25750 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react_devtools_backend.js:4012
Warning: lazy: Expected the result of a dynamic import() call. Instead
received: [object Module]
Your code should look like: const MyComponent = lazy(() =>
import('./MyComponent'))
at Lazy
at RenderedRoute (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:4840:5)
at Routes (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5272:5)
at Suspense
at App
at Router (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5204:15)
at BrowserRouter (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:3464:5)
overrideMethod # react_devtools_backend.js:4012 printWarning #
react.development.js:209 error # react.development.js:183
lazyInitializer # react.development.js:1400 mountLazyComponent #
react-dom.development.js:19944 beginWork #
react-dom.development.js:21593 beginWork$1 #
react-dom.development.js:27426 performUnitOfWork #
react-dom.development.js:26557 workLoopSync #
react-dom.development.js:26466 renderRootSync #
react-dom.development.js:26434 recoverFromConcurrentError #
react-dom.development.js:25850 performConcurrentWorkOnRoot #
react-dom.development.js:25750 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react_devtools_backend.js:4012
Warning: lazy: Expected the result of a dynamic import() call. Instead
received: [object Module]
Your code should look like: const MyComponent = lazy(() =>
import('./MyComponent'))
at Lazy
at RenderedRoute (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:4840:5)
at Routes (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5272:5)
at Suspense
at App
at Router (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5204:15)
at BrowserRouter (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:3464:5)
overrideMethod # react_devtools_backend.js:4012 printWarning #
react.development.js:209 error # react.development.js:183
lazyInitializer # react.development.js:1400 mountLazyComponent #
react-dom.development.js:19944 beginWork #
react-dom.development.js:21593 callCallback #
react-dom.development.js:4164 invokeGuardedCallbackDev #
react-dom.development.js:4213 invokeGuardedCallback #
react-dom.development.js:4277 beginWork$1 #
react-dom.development.js:27451 performUnitOfWork #
react-dom.development.js:26557 workLoopSync #
react-dom.development.js:26466 renderRootSync #
react-dom.development.js:26434 recoverFromConcurrentError #
react-dom.development.js:25850 performConcurrentWorkOnRoot #
react-dom.development.js:25750 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react-dom.development.js:20013
Uncaught Error: Element type is invalid. Received a promise that
resolves to: undefined. Lazy element type must resolve to a class or
function.
at mountLazyComponent (react-dom.development.js:20013:1)
at beginWork (react-dom.development.js:21593:1)
at HTMLUnknownElement.callCallback (react-dom.development.js:4164:1)
at Object.invokeGuardedCallbackDev (react-dom.development.js:4213:1)
at invokeGuardedCallback (react-dom.development.js:4277:1)
at beginWork$1 (react-dom.development.js:27451:1)
at performUnitOfWork (react-dom.development.js:26557:1)
at workLoopSync (react-dom.development.js:26466:1)
at renderRootSync (react-dom.development.js:26434:1)
at recoverFromConcurrentError (react-dom.development.js:25850:1) mountLazyComponent # react-dom.development.js:20013 beginWork #
react-dom.development.js:21593 callCallback #
react-dom.development.js:4164 invokeGuardedCallbackDev #
react-dom.development.js:4213 invokeGuardedCallback #
react-dom.development.js:4277 beginWork$1 #
react-dom.development.js:27451 performUnitOfWork #
react-dom.development.js:26557 workLoopSync #
react-dom.development.js:26466 renderRootSync #
react-dom.development.js:26434 recoverFromConcurrentError #
react-dom.development.js:25850 performConcurrentWorkOnRoot #
react-dom.development.js:25750 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react_devtools_backend.js:4012 The
above error occurred in the <Route.Provider> component:
at RenderedRoute (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:4840:5)
at Routes (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5272:5)
at Suspense
at App
at Router (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:5204:15)
at BrowserRouter (http://localhost:4200/vendors-node_modules_react-router-dom_dist_index_js.js:3464:5)
Consider adding an error boundary to your tree to customize error
handling behavior. Visit https://reactjs.org/link/error-boundaries to
learn more about error boundaries. overrideMethod #
react_devtools_backend.js:4012 logCapturedError #
react-dom.development.js:18687 update.callback #
react-dom.development.js:18720 callCallback #
react-dom.development.js:13923 commitUpdateQueue #
react-dom.development.js:13944 commitLayoutEffectOnFiber #
react-dom.development.js:23391 commitLayoutMountEffects_complete #
react-dom.development.js:24688 commitLayoutEffects_begin #
react-dom.development.js:24674 commitLayoutEffects #
react-dom.development.js:24612 commitRootImpl #
react-dom.development.js:26823 commitRoot #
react-dom.development.js:26682 finishConcurrentRender #
react-dom.development.js:25892 performConcurrentWorkOnRoot #
react-dom.development.js:25809 workLoop # scheduler.development.js:266
flushWork # scheduler.development.js:239 performWorkUntilDeadline #
scheduler.development.js:533 queue. # task.js:61 run #
task.js:35 listener # task.js:46 react-dom.development.js:26923
Uncaught TypeError: Cannot read properties of undefined (reading
'displayName')
at getDisplayName (react_devtools_backend.js:261:19)
at getDisplayNameForFiber (react_devtools_backend.js:6381:55)
at Object.markComponentErrored (react_devtools_backend.js:5615:29)
at markComponentErrored (react-dom.development.js:5053:1)
at handleError (react-dom.development.js:26307:1)
at renderRootSync (react-dom.development.js:26437:1)
at recoverFromConcurrentError (react-dom.development.js:25850:1)
at performConcurrentWorkOnRoot (react-dom.development.js:25750:1)
at workLoop (scheduler.development.js:266:1)
at flushWork (scheduler.development.js:239:1)
What am I doing wrong or what's missing here? Is there an example how to use this documentation to combine React and Angular? If you do the same steps with only React or only Angular it works fine..
Hope someone can help..
Angular Micro Frontend:
Shell Application:
React Micro Frontend
I do not exactly know what is wrong on your configuration, but to use different technologies together with module-federation please take a look here:
https://www.angulararchitects.io/aktuelles/multi-framework-and-version-micro-frontends-with-module-federation-your-4-steps-guide/
There is a very good example how to combine different technologies together.
I hope that helps.

MERN (Axios): Uncaught TypeError (data is not defined)

I am new to MERN stack and I am trying to build a login/registration system on the stack.
When I am trying to make a post request it is throwing this error:
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'data')
at registrationHandler (Register.jsx:47:1)
at HTMLUnknownElement.callCallback (react-dom.development.js:3945:1)
at Object.invokeGuardedCallbackDev (react-dom.development.js:3994:1)
at invokeGuardedCallback (react-dom.development.js:4056:1)
at invokeGuardedCallbackAndCatchFirstError (react-dom.development.js:4070:1)
at executeDispatch (react-dom.development.js:8243:1)
at processDispatchQueueItemsInOrder (react-dom.development.js:8275:1)
at processDispatchQueue (react-dom.development.js:8288:1)
at dispatchEventsForPlugins (react-dom.development.js:8299:1)
at react-dom.development.js:8508:1
registrationHandler # Register.jsx:47
callCallback # react-dom.development.js:3945
invokeGuardedCallbackDev # react-dom.development.js:3994
invokeGuardedCallback # react-dom.development.js:4056
invokeGuardedCallbackAndCatchFirstError # react-dom.development.js:4070
executeDispatch # react-dom.development.js:8243
processDispatchQueueItemsInOrder # react-dom.development.js:8275
processDispatchQueue # react-dom.development.js:8288
dispatchEventsForPlugins # react-dom.development.js:8299
(anonymous) # react-dom.development.js:8508
batchedEventUpdates$1 # react-dom.development.js:22396
batchedEventUpdates # react-dom.development.js:3745
dispatchEventForPluginEventSystem # react-dom.development.js:8507
attemptToDispatchEvent # react-dom.development.js:6005
dispatchEvent # react-dom.development.js:5924
unstable_runWithPriority # scheduler.development.js:468
runWithPriority$1 # react-dom.development.js:11276
discreteUpdates$1 # react-dom.development.js:22413
discreteUpdates # react-dom.development.js:3756
dispatchDiscreteEvent # react-dom.development.js:5889
My code is as follows:
This is being called on Form Submit
When I am making the same request from Postman it happens successfully:
Please any help is appreciated...
I was importing Axios as
import { axios } from 'axios'
which should be
import axios from 'axios'.
Also, history.push() was replaced by useNavigate('/') in v6 of react-router-dom.
Lastly at line 30, it should be data.data.token.

process.env.REACT_APP_KEY not working with api calls

So far in 2 projects I created a .env file in the root of my project. I install npm install dotenv. I place (e.g.)REACT_APP_KEY='123456' in the env file . In my app.js file I add require("dotenv").config() in my component where I am making the api call i console.log(process.env.REACT_APP_KEY) in the the console I get 123456. So far it looks like its working. But when I place the process.env.REACT_APP_KEY in the api call I get 404 error? What am i missing? If I remove process.env.REACT_APP_KEY and add 123456, I get no error and the call works. Is it because I am using axios to get the data, should i use fetch? I can't seem to find anything that can help me with this. I included my error below.
thank you.
xhr.js:177 GET https://api.unsplash.com/search/photos?query=bali 401
dispatchXhrRequest # xhr.js:177
xhrAdapter # xhr.js:13
dispatchRequest # dispatchRequest.js:52
Promise.then (async)
request # Axios.js:61
Axios.<computed> # Axios.js:76
wrap # bind.js:9
getImages # App.js:12
onSearchSubmit # App.js:20
App # App.js:22
renderWithHooks # react-dom.development.js:14985
mountIndeterminateComponent # react-dom.development.js:17811
beginWork # react-dom.development.js:19049
beginWork$1 # react-dom.development.js:23940
performUnitOfWork # react-dom.development.js:22776
workLoopSync # react-dom.development.js:22707
renderRootSync # react-dom.development.js:22670
performSyncWorkOnRoot # react-dom.development.js:22293
scheduleUpdateOnFiber # react-dom.development.js:21881
updateContainer # react-dom.development.js:25482
(anonymous) # react-dom.development.js:26021
unbatchedUpdates # react-dom.development.js:22431
legacyRenderSubtreeIntoContainer # react-dom.development.js:26020
render # react-dom.development.js:26103
(anonymous) # index.js:7
./src/index.js # index.js:18
__webpack_require__ # bootstrap:856
fn # bootstrap:150
1 # reportWebVitals.js:14
__webpack_require__ # bootstrap:856
checkDeferredModules # bootstrap:45
webpackJsonpCallback # bootstrap:32
(anonymous) # main.chunk.js:1
createError.js:16 Uncaught (in promise) Error: Request failed with status code 401
at createError (createError.js:16)
at settle (settle.js:17)
at XMLHttpRequest.handleLoad (xhr.js:62)

How to solve 'prop type error' for my react-dropzone app

I am trying to build an app using react dropzone to handle file uploading. I have been scratching my head about this error for hours now.
Warning: Failed prop type: Invalid prop children of type array
supplied to Dropzone, expected function.
in Dropzone (at MyEditor.js:145)
in MyEditor (at App.js:15)
in div (at App.js:14)
in div (at App.js:10)
in App (at src/index.js:7) function.console.(anonymous function) # index.js:1446 printWarning # checkPropTypes.js:21 checkPropTypes #
checkPropTypes.js:76 validatePropTypes # react.development.js:1716
createElementWithValidation # react.development.js:1809 render #
MyEditor.js:145 finishClassComponent # react-dom.development.js:15119
updateClassComponent # react-dom.development.js:15074 beginWork #
react-dom.development.js:16064 performUnitOfWork #
react-dom.development.js:20084 workLoop #
react-dom.development.js:20125 renderRoot #
react-dom.development.js:20205 performWorkOnRoot #
react-dom.development.js:21162 performWork #
react-dom.development.js:21072 performSyncWork #
react-dom.development.js:21046 requestWork #
react-dom.development.js:20901 scheduleWork #
react-dom.development.js:20714 scheduleRootUpdate #
react-dom.development.js:21409 updateContainerAtExpirationTime #
react-dom.development.js:21435 updateContainer #
react-dom.development.js:21503 ReactRoot.render #
react-dom.development.js:21816 (anonymous) #
react-dom.development.js:21968 unbatchedUpdates #
react-dom.development.js:21291 legacyRenderSubtreeIntoContainer #
react-dom.development.js:21964 render # react-dom.development.js:22039
(anonymous) # index.js:7 ./src/index.js # main.chunk.js:78
webpack_require # bundle.js:782 fn # bundle.js:150 0 # main.chunk.js:161
webpack_require # bundle.js:782 checkDeferredModules # bundle.js:46 webpackJsonpCallback # bundle.js:33 (anonymous) #
main.chunk.js:1
I've tried to add a getRootprops() like it says to do in the docs but I'm still experiencing the breaking issue. Here's a link to the repo where the broken component is visible.
You have to put function inside Dropzone component, as stated on their official docs. And you can see it yourself on the error. children of Drozone need a function to work properly.
I have a working example from my own project:
<Dropzone onDrop={this.onDrop}>
{
({ getRootProps, getInputProps }) => {
return (
<div {...getRootProps()} className="image-dropzone">
<input {...getInputProps()} />
<div className="preview-container">
<div className="preview">
{
!isEmpty(files) ? (
<img src={files[0].preview} alt={files.name} />
) : (
<span>your thumbnail goes here...</span>
)
}
</div>
</div>
</div>
)
}
}
</Dropzone>
This code preview an image on the files prop, after user added the image via react-dropzone.
You can try to adapt to your code.
Basically you need an input inside the function inside Dropzone component, and the input acts like common input with type="file".

Resources