Reactjs 我可以包括<;隐藏>;材质UI中的菜单项<;菜单>;组件?
我的应用程序栏中有一个菜单,我希望当有空间时,某些项目必须显示为应用程序栏上的按钮,当没有空间时,必须显示为现有菜单中的菜单项。也就是说,菜单始终存在,并且始终包含项目。我只是希望根据屏幕大小将一些功能设置为AppBar按钮或菜单项 下面是一个简化的示例:Reactjs 我可以包括<;隐藏>;材质UI中的菜单项<;菜单>;组件?,reactjs,material-ui,Reactjs,Material Ui,我的应用程序栏中有一个菜单,我希望当有空间时,某些项目必须显示为应用程序栏上的按钮,当没有空间时,必须显示为现有菜单中的菜单项。也就是说,菜单始终存在,并且始终包含项目。我只是希望根据屏幕大小将一些功能设置为AppBar按钮或菜单项 下面是一个简化的示例: <Menu id="settings-menu" anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={handleClose} > &
<Menu
id="settings-menu"
anchorEl={anchorEl}
open={Boolean(anchorEl)}
onClose={handleClose}
>
<Hidden lgUp>
<MenuItem onClick={logout}>
<ListItemIcon><ExitToAppIcon /></ListItemIcon>
<ListItemText primary="Hidden log out" />
</MenuItem>
</Hidden>
<MenuItem onClick={logout}>
<ListItemIcon><ExitToAppIcon /></ListItemIcon>
<ListItemText primary="Log out" />
</MenuItem>
</Menu>
在
中是否允许使用
组件?如果不支持,有什么好方法可以允许菜单项根据屏幕大小有条件地显示?因为错误表明隐藏
不支持接收ref,这是菜单项所必需的
但是,您可以使用框
实现相同的目标:
import React from "react";
import Button from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import MenuItem from "@material-ui/core/MenuItem";
import Box from "@material-ui/core/Box";
export default function SimpleMenu() {
const [anchorEl, setAnchorEl] = React.useState(null);
const handleClick = event => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
return (
<div>
<Button
aria-controls="simple-menu"
aria-haspopup="true"
onClick={handleClick}
>
Open Menu
</Button>
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}
>
<MenuItem onClick={handleClose}>Always Displayed</MenuItem>
<Box clone display={{ sm: "none" }}>
<MenuItem onClick={handleClose}>Profile</MenuItem>
</Box>
<Box clone display={{ lg: "none" }}>
<MenuItem onClick={handleClose}>My account</MenuItem>
</Box>
<Box clone display={{ md: "none" }}>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Box>
</Menu>
</div>
);
}
文件:
Box
——这是一个问题,有关更多详细信息和替代方案的讨论,请参见我的回答:。@KyleBaley我添加了一个替代解决方案(使用和样式
),它没有Box
方法的脆弱性。谢谢@ryan cogswell。我也喜欢这个解决方案。
import React from "react";
import Button from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import MenuItem from "@material-ui/core/MenuItem";
import Box from "@material-ui/core/Box";
export default function SimpleMenu() {
const [anchorEl, setAnchorEl] = React.useState(null);
const handleClick = event => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
return (
<div>
<Button
aria-controls="simple-menu"
aria-haspopup="true"
onClick={handleClick}
>
Open Menu
</Button>
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}
>
<MenuItem onClick={handleClose}>Always Displayed</MenuItem>
<Box clone display={{ sm: "none" }}>
<MenuItem onClick={handleClose}>Profile</MenuItem>
</Box>
<Box clone display={{ lg: "none" }}>
<MenuItem onClick={handleClose}>My account</MenuItem>
</Box>
<Box clone display={{ md: "none" }}>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Box>
</Menu>
</div>
);
}
import React from "react";
import Button from "@material-ui/core/Button";
import Menu from "@material-ui/core/Menu";
import MenuItem from "@material-ui/core/MenuItem";
import { withStyles } from "@material-ui/core/styles";
const MenuItemHiddenLgUp = withStyles(theme => ({
root: {
[theme.breakpoints.up("lg")]: {
display: "none"
}
}
}))(MenuItem);
export default function SimpleMenu() {
const [anchorEl, setAnchorEl] = React.useState(null);
const handleClick = event => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
return (
<div>
<Button
aria-controls="simple-menu"
aria-haspopup="true"
onClick={handleClick}
>
Open Menu
</Button>
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}
>
<MenuItem onClick={handleClose}>Always Displayed</MenuItem>
<MenuItemHiddenLgUp onClick={handleClose}>Profile</MenuItemHiddenLgUp>
<MenuItemHiddenLgUp onClick={handleClose}>
My account
</MenuItemHiddenLgUp>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</Menu>
</div>
);
}