我已经创建了一个基本的模态使用react没有任何库,它的工作完美,现在当我点击模态外,我想关闭模态。
这是CodeSandbox的实时预览
我索引.js:
import React from "react";
import ReactDOM from "react-dom";
import "./styles.css";
class App extends React.Component {
constructor() {
super();
this.state = {
showModal: false
};
}
handleClick = () => {
this.setState(prevState => ({
showModal: !prevState.showModal
}));
};
render() {
return (
<>
<button onClick={this.handleClick}>Open Modal</button>
{this.state.showModal && (
<div className="modal">
I'm a modal!
<button onClick={() => this.handleClick()}>close modal</button>
</div>
)}
</>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
9条答案
按热度按时间jslywgbw1#
实现此目的最简单的方法是在 Package 器中调用closeModal函数,并在实际模态中停止传播
比如说
tzdcorbm2#
如果使用
ref
,则会有点棘手观看CodeSandBox
h6my8fg23#
你可以通过为模态背景创建一个div来实现它,它位于模态主体的旁边。使用绝对位置和100%的高度和宽度值使它覆盖整个屏幕。
这样,模态主体就位于背景之上。如果您单击模态主体,则不会发生任何事情,因为背景没有接收到单击事件。但如果您单击背景,则可以处理单击事件并关闭模态。
关键的是,模态背景不会包裹模态主体,而是位于它旁边。如果它包裹了主体,那么在背景或主体上的任何点击都会关闭模态。
第一个
f5emj3cl4#
有关工作示例,请参见随附的Codesandbox。
你就快成功了。首先,你需要在你的
handleClick()
中做一个回调函数,将一个closeMenu
方法添加到文档中:然后切换
closeMenu()
内的状态:任何时候你点击组件的外部,然后它会关闭它。:)
ulydmbyx5#
这对我很有效:
需要使用
e.stopPropagation
来防止循环然后:
希望会有所帮助
ubbxdtey6#
我是这样解决的:顺便说一句,我是一个初级开发人员,所以检查它,GL。
在index.html中:
在index.js中:
在App.js中:
在胁迫回应容器中:
li9yvcax7#
使用下面的onClick方法,
kxeu7u2r8#
您可以检查event.target.className,如果它包含父类,您可以关闭模态,如下所示,如果您在弹出窗口div内单击,它将不会关闭:
kmbjn2e39#
这对我很有效: