Material-UI的Drawer抽屉为什么点击遮罩层关不掉?
我用Material-UI写了个临时抽屉(temporary Drawer),但点遮罩层(backdrop)的时候抽屉不会自动关闭,文档里说默认是能关的啊?是不是我哪里写错了?
我试过加了onClose,也确认了open状态是受控的,但还是不行。控制台也没报错,就是点外面没反应。
const [open, setOpen] = React.useState(false);
return (
<Drawer
open={open}
onClose={() => setOpen(false)}
variant="temporary"
>
<div>菜单内容</div>
</Drawer>
);
不过我见过类似的问题,十有八九是下面这几个原因:
最常见的是 Drawer 的父容器样式问题。如果父元素设置了
overflow: hidden或者position: relative,Modal 的遮罩层事件可能被拦截了。你可以把 Drawer 放到最外层去试试,或者给父容器加上position: static。另一个可能是 MUI 版本问题。如果你用的是 v5,试试把代码改成这样:
v5 里面 explicit 一下 Modal 的 backdrop 点击处理更稳妥。
还有一种情况是你用了
Slide或者其他过渡动画,然后动画还没结束就点遮罩层,这时候可能不触发 onClose。你先试试加上
ModalProps那段,如果还不行就把父容器的样式检查一下,十有八九是样式冲突的问题。