reactjs - 有没有办法使用作为我的过渡组件,同时使用组件来显示菜单 onHover?
问题描述
以下问题是关于 React 和 Material-UI 的:
我在显示我的onMouseEnter时尝试使用<Collapse>
转换组件。但是,Material-UI 库中的组件和/组件<Menu>
的方式似乎存在问题。该问题目前是开放的,可以在这里看到。<Collapse>
<Popper>
<Popover>
有没有人找到一个很好的解决方法?基本上,我只是希望当您将鼠标悬停在具有此特定转换的链接上时会出现一个子导航菜单。
我已经尝试使用该<Grow>
组件并且过渡效果很好,但我们特别尝试使用<Collapse>
过渡。
export const NavBarItem = ({ navItem }) => {
const classes = useStyles();
const [open, setOpen] = React.useState(false);
const anchorRef = React.useRef(null);
function handleToggle() {
setOpen(prevOpen => !prevOpen);
}
function handleClose(event) {
if (anchorRef.current && anchorRef.current.contains(event.target)) {
return;
}
setOpen(false);
}
return (
<React.Fragment>
<Link className={classes.link} href={BASE_HOMEPAGE + navItem.path}>
<Typography
className={classes.title}
ref={anchorRef}
aria-controls="menu-list-grow"
aria-haspopup="true"
onMouseEnter={handleToggle}
onMouseLeave={handleToggle}
>
{navItem.title}
</Typography>
</Link>
<Popper
open={open}
anchorEl={anchorRef.current}
onMouseEnter={handleToggle}
onMouseLeave={handleToggle}
transition
disablePortal
placement="bottom-start"
>
<Collapse in={open}>
<Paper id="menu-list-grow">
<ClickAwayListener onClickAway={handleClose}>
<MenuList className={classes.paperMenu}>
{navItem.menuItems.map(item => (
<Link
className={classes.link}
href={
item.external ? item.path : BASE_HOMEPAGE + item.path
}
>
<MenuItem
className={classes.paperMenuItem}
onClick={handleClose}
>
{item.text}
</MenuItem>
</Link>
))}
</MenuList>
</ClickAwayListener>
</Paper>
</Collapse>
</Popper>
</React.Fragment>
);
};
上面显示的代码适用于 NavComponent 中的特定 NavItem。它本质上只是一个下拉组件,当您将鼠标悬停在特定链接上时显示子导航。
感谢您的帮助,如果您需要更多信息,请告诉我。
解决方案
您可以尝试使用道具时TransitionProps
给出的,如文档中所示Popper
transition
<Popper id={id} open={open} anchorEl={anchorEl} transition>
{({ TransitionProps }) => (
<Fade {...TransitionProps} timeout={350}>
<div className={classes.paper}>The content of the Popper.</div>
</Fade>
)}
</Popper>
对于更流畅的 UI,您还可以使用以下keepMounted
属性Popper
:
<Popper id={id} open={open} anchorEl={anchorEl} transition keepMounted>
推荐阅读
- javascript - 使用正则表达式验证逗号分隔的数字字符串?
- python - Mypy:如何将类型作为函数参数并在该类型上调用类方法
- angular - 角 | ng2-smart-table 如何使用 ServerDataSource 对表进行排序
- django - ModuleNotFoundError:没有名为:crispy_forms 的模块
- c++ - 为什么 ## aka 标记粘贴运算符不适用于 C 和 C++ 中的注释?
- typo3 - femanager - 如何将注册发送到特殊页面(而不仅仅是活动页面)
- javascript - 每个帖子下的 Gatsby 网站上一个和下一个链接
- google-bigquery - BigQuery 中缺少的airline_ontime_data 和weather_geo(应该在样本下)在哪里?
- javascript - vue过滤列表点击
- windows - 在批处理文件的 for 循环中使用关系运算符