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

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".

Related

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.

Spring React Chrome CORS error when accessed outside router

I use Chrome as my default browser. I have cross origins configured in my Spring backend and React front end.
Spring: #CrossOrigin(origins = "http://localhost:3000")
React: const USER_API_BASE_URL = "http://localhost:8080/api/v1/users";
All works great when I am working on my PC. I configured NOIP and configured my router to route incoming to my development PC. When I start a session using the external address I get the CORS error:
...
Access to XMLHttpRequest at 'http://localhost:8080/api/v1/users' from origin 'http://TESTURL.ddns.net:3000' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `local`.
xhr.js:187 GET http://localhost:8080/api/v1/users net::ERR_FAILED
dispatchXhrRequest # xhr.js:187
xhrAdapter # xhr.js:13
dispatchRequest # dispatchRequest.js:53
request # Axios.js:108
Axios.<computed> # Axios.js:129
wrap # bind.js:9
getUsers # UserService.js:8
componentDidMount # LoginComponent.jsx:19
commitLifeCycles # react-dom.development.js:19816
commitLayoutEffects # react-dom.development.js:22805
callCallback # react-dom.development.js:188
invokeGuardedCallbackDev # react-dom.development.js:237
invokeGuardedCallback # react-dom.development.js:292
commitRootImpl # react-dom.development.js:22543
unstable_runWithPriority # scheduler.development.js:653
runWithPriority$1 # react-dom.development.js:11039
commitRoot # react-dom.development.js:22383
finishSyncRender # react-dom.development.js:21809
performSyncWorkOnRoot # react-dom.development.js:21795
scheduleUpdateOnFiber # react-dom.development.js:21190
updateContainer # react-dom.development.js:24375
(anonymous) # react-dom.development.js:24760
unbatchedUpdates # react-dom.development.js:21905
legacyRenderSubtreeIntoContainer # react-dom.development.js:24759
render # react-dom.development.js:24842
(anonymous) # index.js:8
./src/index.js # index.js:19
__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
Show 4 more frames
createError.js:16 Uncaught (in promise) Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:99)
...
Is there a way around this?
The solution was
In the React front end changing
const USER_API_BASE_URL = "http://localhost:8080/api/v1/documenttype";
to
const USER_API_BASE_URL = "http://XXsystem.ddns.net:8080/api/v1/documenttype";
In the Spring backend changing
#CrossOrigin("http://localhost:3000")
to
#CrossOrigin(origins = "http://XXsystem.ddns.net:3000")
Interesting that the 'localhost testing still work !
Best of both worlds.

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

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?

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)

md contact chips css not working

I am using md contact chips and my template looks like this
<md-chips ng-model="ser" md-autocomplete-snap
md-require-match="true">
<md-autocomplete
ng-disabled="autoCompleteOptions.isDisabled"
md-no-cache="autoCompleteOptions.noCache"
md-selected-item="si"
md-search-text="searchText"
md-items="sellable in getSellableByFilter(searchText)"
md-min-length="1"
md-item-text="sellable.name"
placeholder="Search for a Service/Package here"
md-select-on-match="true",
>
</md-autocomplete>
<md-chip-template>
<span>
<strong>{{$chip.name}}</strong>
</span>
</md-chip-template>
</md-chips>
Searching works fine but when I select an item, it looks like input field only and there is no chip like css attached.
How do I fix this?
I tried using md contact chips as well but still same issue.
error message I see in console
angular.js:14800 TypeError: Cannot read property 'some' of undefined
at MdChipsCtrl.appendChip (angular-material.js:27822)
at MdChipsCtrl.<anonymous> (angular-material.js:28128)
at angular.js:1383
at angular-material.js:25732
at Array.forEach (<anonymous>)
at handleSelectedItemChange (angular-material.js:25732)
at angular-material.js:25694
at processQueue (angular.js:17169)
at angular.js:17217
at Scope.$digest (angular.js:18352) "Possibly unhandled rejection: {}"
(anonymous) # angular.js:14800
(anonymous) # angular.js:11218
processChecks # angular.js:17199
$digest # angular.js:18352
(anonymous) # angular.js:18581
completeOutstandingRequest # angular.js:6428
(anonymous) # angular.js:6707
setTimeout (async)
Browser.self.defer # angular.js:6705
$evalAsync # angular.js:18579
(anonymous) # angular.js:17041
scheduleProcessQueue # angular.js:17217
then # angular.js:17138
getDisplayValue # angular-material.js:25907
(anonymous) # angular-material.js:26070
(anonymous) # angular-material.js:1730
processQueue # angular-material.js:1727
(anonymous) # angular.js:20566
completeOutstandingRequest # angular.js:6428
(anonymous) # angular.js:6707
setTimeout (async)
Browser.self.defer # angular.js:6705
timeout # angular.js:20564
nextTick # angular-material.js:1711
positionDropdown # angular-material.js:25453
handleResults # angular-material.js:26273
handleQuery # angular-material.js:26251
focus # angular-material.js:25824
fn # VM61232:4
callback # angular.js:27475
$digest # angular.js:18352
$apply # angular.js:18649
(anonymous) # angular.js:27480
dispatch # jquery.js:5206
elemData.handle # jquery.js:5014
Your model has to be of type Array, and perhaps in your controller you're not initializing it to anything (it's undefined).
ser = []

Resources