as I mention in Topic
I got a problem with set a href link and passing it to the mobile, desktop menu. Never had this issue with semantic HTML elements, but I always struggle when I try to pass it to react components for pre-prepared elements.
Did anyone struggle with that before? Maybe can someone share with me any tutorial or docs on how to inject an array in this kind of element as a map.
Here's the pure code copied from the newest MUI React Library with added by me array named [items]
// array
const [items] = ([
{
name: 'John',
href: 'https://google.com'
}
]);
function DrawerAppBar(props) {
const { window } = props;
const [mobileOpen, setMobileOpen] = React.useState(false);
const handleDrawerToggle = () => {
setMobileOpen(!mobileOpen);
};
// mobile menu
const drawer = (
<Box onClick={handleDrawerToggle} sx={{ textAlign: 'center' }}>
<Typography variant="h6" sx={{ my: 2 }}>
Logo
</Typography>
<Divider />
<List>
{items.map(item => (
<ListItem key={item} disablePadding>
<ListItemButton component="a" href={item.href} sx={{ textAlign: 'center' }}>
<ListItemText primary={item.name} />
</ListItemButton>
</ListItem>
))}
</List>
</Box>
);
const container = window !== undefined ? () => window().document.body : undefined;
// desktop menu
return (
<Box sx={{ display: 'flex' }}>
<AppBar component="nav">
<Toolbar>
<IconButton
color="inherit"
aria-label="open drawer"
edge="start"
onClick={handleDrawerToggle}
sx={{ mr: 2, display: { sm: 'none' } }}
>
<MenuIcon />
</IconButton>
<Typography
variant="h6"
component="div"
sx={{ flexGrow: 1, display: { xs: 'none', sm: 'block' } }}
>
Logo
</Typography>
<Box sx={{ display: { xs: 'none', sm: 'block' } }}>
{items.map(item => (
<Button key={item.name} sx={{ color: '#fff' }}>
{item.name}
</Button>
))}
</Box>
</Toolbar>
</AppBar>
<Box component="nav">
<Drawer
container={container}
variant="temporary"
open={mobileOpen}
onClose={handleDrawerToggle}
ModalProps={{
keepMounted: true, // Better open performance on mobile.
}}
sx={{
display: { xs: 'block', sm: 'none' },
'& .MuiDrawer-paper': { boxSizing: 'border-box', width: drawerWidth },
}}
>
{drawer}
</Drawer>
</Box>
</Box>
);
}
DrawerAppBar.propTypes = {
/**
* Injected by the documentation to work in an iframe.
* You won't need it on your project.
*/
window: PropTypes.func,
};
export default DrawerAppBar;
And here's the error from Console in Browser
Navbar.jsx:44 Uncaught TypeError: items.map is not a function
at DrawerAppBar (Navbar.jsx:44:1)
at renderWithHooks (react-dom.development.js:16175:1)
at mountIndeterminateComponent (react-dom.development.js:20913:1)
at beginWork (react-dom.development.js:22416:1)
at HTMLUnknownElement.callCallback (react-dom.development.js:4161:1)
at Object.invokeGuardedCallbackDev (react-dom.development.js:4210:1)
at invokeGuardedCallback (react-dom.development.js:4274:1)
at beginWork$1 (react-dom.development.js:27405:1)
at performUnitOfWork (react-dom.development.js:26513:1)
at workLoopSync (react-dom.development.js:26422:1)