reactjs - 单击叠加层时,材质 UI 对话框未关闭
问题描述
我使用 React 和 Material UI 创建了一个可重用的对话框/模式。当我尝试单击叠加层时,会发生一些奇怪的事情。由于某种原因,脚本没有关闭模式并将“open”设置为false,而是直接将open再次设置为true。
单击叠加层时会触发 handleClickOpen,但我找不到导致此问题的问题。
对话框组件:
const { onClose, open } = props;
const handleClose = () => {
onClose();
};
const preventDef = (e) => {
e.stopPropagation();
};
return (
<Dialog open={open} onClose={onClose} className={className} onClick={handleClose}>
<Container>
<Grid container className={`${className}__container`}>
<Grid item xs={12} sm={props.colsAmount} onClick={preventDef} className={`${className}__column`}>
{props.component}
{props.closeButton && (
<div className={`${className}__close`} onClick={handleClose}>
<Close />
</div>
)}
</Grid>
</Grid>
</Container>
</Dialog>
);
我加载并触发对话框的组件:
const [open, setOpen] = React.useState(false);
const handleClose = (e) => {
setOpen(false);
};
const handleClickOpen = () => {
setOpen(true);
};
return (
<div className={[classes.ShopCard]} onClick={handleClickOpen}>
<div className={`${classes.ShopCard}__image`}>
<div className={`${classes.ShopCard}__image__wrapper`}>
<img src={image} alt={alt} />
<div className={`${classes.ShopCard}__image__price`}>Vanaf €{price}</div>
</div>
</div>
<div className={`${classes.ShopCard}__content`}>
<Title title={title} size="h6" />
<Body>{description}</Body>
</div>
<div className={`${classes.ShopCard}__button`}>
<Button label="In winkelwagen" startIcon={<AddShoppingCart />} />
</div>
<CustomDialog
open={open}
onClose={handleClose}
colsAmount={6}
component={<ShopPopUp />}
closeButton="true"
/>
</div>
如果有人可以解释为什么打开状态设置为 true,那就太好了。
解决方案
这是因为:
<div className={[classes.ShopCard]} onClick={handleClickOpen}>
它在 DOM 中的位置比覆盖层更高,因此它总是会触发。
推荐阅读
- php - Codeigniter 复杂的 MySQL 查询
- python - 给定一个列表,如果存在,则从列表中删除索引 0,4,5
- opencv - Nim 无法打开“opencv/highgui”
- c# - 为什么我在使用 XmlDocument 加载 XML 文件时出现错误?
- php - 嘲弄不嘲弄阶级的属性
- datagrip - 使用 DataGrip 时内存不足
- google-sheets - IFS 嵌套多个文本变体以返回 1 个值
- firebase - 使用 Firebase 托管网站时,“npm”未被识别为内部或外部命令
- c# - 从天气 API 返回指定值 - ASP.NET/C#
- apache-flink - Flink,使用多个Kafka源时如何正确设置并行度?