如何解决根据打开的父Popper组件有条件地显示工具提示
我正在尝试根据同级组件Popper
是否打开来有条件地显示工具提示的最佳方法。我想在其子ButtonBase
悬停时默认显示它。如果Popper
打开,我希望工具提示从不打开。工具提示标题是在Popper关闭时在Popper选项列表中选择的内容的摘要,将其打开并打开Popper并不理想且混乱。我是钩子的新手,因此尝试了解如何结合钩子以根据条件需要正确设置tooltipOpen状态。
export default function TooltipwithPopper() {
const classes = useStyles();
const [anchorEl,setAnchorEl] = React.useState(null);
const [value,setValue] = React.useState([options[1],options[11]]);
const [pendingValue,setPendingValue] = React.useState([]);
const [tooltipOpen,setTooltipOpen] = React.useState(false);
const handleClick = (event) => {
setPendingValue(value);
setAnchorEl(event.currentTarget);
setTooltipOpen(false);
};
const handleClose = (event,reason) => {
if (reason === "toggleInput") {
return;
}
setValue(pendingValue);
if (anchorEl) {
anchorEl.focus();
}
setAnchorEl(null);
};
const open = Boolean(anchorEl);
const id = open ? "github-label" : undefined;
return (
<React.Fragment>
<div className={classes.root}>
<Tooltip title={value.map((i) => i.title).join(",")}>
<ButtonBase
disableRipple
className={classes.button}
aria-describedby={id}
onClick={handleClick}
>
<span>Label</span>
{value.length}/{options.length}
</ButtonBase>
</Tooltip>
</div>
<Popper
id={id}
open={open}
anchorEl={anchorEl}
placement="bottom-start"
className={classes.popper}
>
<Autocomplete
open
onClose={handleClose}
multiple
classes={{
paper: classes.paper,option: classes.option,popperdisablePortal: classes.popperdisablePortal
}}
value={pendingValue}
onChange={(event,newValue) => {
setPendingValue(newValue);
}}
disableCloSEOnSelect
disablePortal
renderTags={() => null}
noOptionsText="No labels"
.....
/>
</Popper>
</React.Fragment>
);
}
这是工具提示应用于触发元素的演示。如何根据其他组件的状态将其设置为仅打开?我尝试在打开setTooltipOpen(false)
时调用handleClick
时添加一个Popper
调用。
演示:https://codesandbox.io/s/material-demo-forked-0wgyh?file=/demo.js:0-6181
解决方法
您可以在Tooltip
状态下控制open
tooltipOpen
属性值(具体实现由您决定),并提供条件,以确保Popper
为{{1} },然后自动进行open
Tooltip
道具价值计算,将忽略open
状态并分配tooltipOpen
。
在下面的示例中,我通过false
&& tooltipOpen
事件控制onMouseEnter
状态
onMouseLeave
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。