在Material UI React中使用Drawer component
。我希望Drawer component
中的状态不会在关闭Drawer组件时丢失,因此我在Drawer组件中传递variant="persistent"
。
现在,问题是,Persistent Drawer
不提供backdrop functionality
默认不像temporary
抽屉,因此我无法关闭它的外部点击。我也试过{{ModalProps={{ onBackdropClick: this.toggleDrawer }} }}
,但仍然不起作用。
对此有什么变通方法吗?
材质界面版本:1.0.0
8条答案
按热度按时间tquggr8v1#
为了搜索者登陆这个问题。如果您在使用
ClickAwayListener
时遇到问题并且没有使用variant='persistent'
。试试这个:为ModalProps
onBackdropClick
提供切换功能2021年7月更新:
我最近更新了
material-ui/core
到4.12.1
版本,注意到onBackdropClick
正在被弃用。相反,他们增加了对该功能的本地支持,当在抽屉外单击时,onClose
函数将自动调用,现在它给出了reason
的调用原因:签名:
function(event: object, reason: string) => void
event
:回调的事件源。reason
:可以是:“escapeKeyDown”,“backdropClick”参见此处的示例:https://material-ui.com/api/modal/向下滚动到onBackDropClicked -它对抽屉的作用与对
请改为执行以下操作:
42fyovps2#
您可以使用
ClickAwayListener
组件来完成此操作。https://material-ui.com/api/click-away-listener/
https://codesandbox.io/s/072ny1rjw
2exbekwf3#
我花了一些时间训练来解决这个问题,但我发现了一个非常有用的解决方案,就是将变体更改为Temporary并使用de onEscapeKeyDown和onBackdropClick,如下所示:
u59ebvdq4#
MUI v5工作方案:
持久
Drawer
使用
ClickAwayListener
可以知道用户何时在Drawer
之外单击。您还需要设置mouseEvent="onMouseDown"
,否则在用户单击打开按钮后会触发onClickAway
回调,并使Drawer
在打开之前立即关闭。临时
Drawer
现场演示
zbq4xfa05#
你可以通过在
appFrame
中添加一个div来实现它,它有一个onClick
,可以像这样关闭抽屉:xmakbtuz6#
我不确定它是否适用于1.0.0版本,但这种方法适用于我注意到,我使用的抽屉从“材料-ui/核心@4.10”
jm81lzqq7#
最近发现了这个整洁的useOnClickOutside hook => CodeSandBox,并用它替换了所有我的。比添加一个元素到dom要优雅得多,而且现在你可以向任何Material-ui组件传递ref属性,所以很容易使用Mui。
6ioyuze28#
您可以在Drawer的open属性中使用useState,并在onClose属性中设置为false:
onClose={() => setOpen(false)}
在本例中,useState名称为open和setOpen