【发布时间】:2019-11-14 18:40:19
【问题描述】:
我无法弄清楚这一点。我已经实现了一个弹出框组件,当用户将鼠标悬停在“i”图标上时,应该打开一个弹出框,当用户将鼠标悬停在图标之外时,它应该关闭弹出框。我认为正在发生的事情是,当将鼠标悬停在图标上时,会不断调用 open 和 close 方法,因此看起来它从未被打开过。
我的组件:
export const InfoIconWrapper = styled(InfoIcon)(({ theme }) => ({
color: fade(theme.palette.black, 0.3),
}));
export const GridWrapper = styled(Grid)(({ theme }) => ({
pointerEvents: 'none',
padding: theme.spacing(1),
}));
const DistributionLinePopover = ({ distributionLine }) => {
const [anchorEl, setAnchorEl] = useState(null);
const handlePopoverOpen = event => {
setAnchorEl(event.currentTarget);
};
const handlePopoverClose = () => {
setAnchorEl(null);
};
const open = Boolean(anchorEl);
const mouseOverPopover = 'mouse-over-popover';
return (
<Fragment>
<Typography
aria-owns={open ? mouseOverPopover : undefined}
aria-haspopup="true"
onMouseEnter={handlePopoverOpen}
onMouseOut={handlePopoverClose}
>
<InfoIconWrapper fontSize="small" />
</Typography>
<Popover
id={mouseOverPopover}
open={open}
anchorEl={anchorEl}
anchorOrigin={{
vertical: 'bottom',
horizontal: 'left',
}}
transformOrigin={{
vertical: 'top',
horizontal: 'left',
}}
// onMouseOut={handlePopoverClose}
disableRestoreFocus
>
<GridWrapper container>
...
</GridWrapper>
</Popover>
</Fragment>
);
};
如何修改此代码以使其按预期运行?最初我尝试将handlePopoverClose 传递给popover,但这使得只有当您将鼠标悬停在实际的popover 上而不是悬停在“i”图标之外时,popover 才会关闭。
【问题讨论】:
标签: reactjs material-ui popover