【发布时间】:2021-12-06 06:58:19
【问题描述】:
模态所需的功能是,当单击“更多”按钮时,它应该是可见的,并且当单击更多按钮或屏幕的任何其他部分(不包括模态本身)时,模态应该关闭.从https://usehooks-typescript.com/react-hook/use-on-click-outside和MUI的ClickAwayListener开始,我尝试了各种方法。
<ClickAwayListener
onClickAway={handleClickAway}
>
<div style={{ position: 'relative' }}>
<button
onClick={(e: any) => {
e.stopPropagation();
setModalVisible(!modalVisible);
}}
>
More
</button>
<Modal
visible={modalVisible}
id="btn-container"
>
{dummy.map((str: string) => {
return <span>{str}</span>;
})}
</Modal>
</div>
</ClickAwayListener>
const handleClickAway = (e: any) => {
if (e.target.localName === 'body') {
e.preventDefault();
return;
}
setModalVisible(false);
};
const Modal = styled.div`
position: absolute;
top: 30px;
left: -200px;
background: #fff;
padding: 25px;
z-index: 8;
visibility: ${({ visible }) => (visible ? 'visible' : 'hidden')};
box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);
width: 250px;
max-height: 320px;
overflow-y: auto;
`;
基本上,ClickAwayListener 无法检测到它的子组件,并且即使我在不应该是功能的模式内部单击时也会关闭模式。
这里使用的'Modal'组件不是materialui组件,是我自己构建的样式化组件
【问题讨论】:
标签: javascript reactjs typescript material-ui frontend