javascript - 反应:stopPropagation() 似乎不起作用?
问题描述
我有一个带有切换模式组件功能的页脚组件。在模态组件中,我有一个背景包装器和嵌套在该包装器内的模态。我已将 toggleModal 函数设置为道具并将其添加到模态的包装器中。我不希望模态本身具有此单击功能,因此我stopPropagation()
在我的功能中使用以阻止事件冒泡,尽管这似乎不起作用。
页脚组件:
const Footer = () => {
const [showModal, setShowModal] = useState(false);
function toggleModal(e) {
e.stopPropagation();
setShowModal(!showModal);
}
return (
<div>
<button onClick={toggleModal}>Modal toggle</button>
<Modal show={showModal} toggle={toggleModal}>This is a modal</Modal>
</div>
)
}
模态组件:
const Modal = () => {
return (
<div className="modal__wrapper" onClick={props.toggle}>
<div className="modal p-3">
<div className="modal__close" onClick={props.toggle} role="button" aria-hidden="true">
X
</div>
{props.children}
</div>
</div>
)
}
解决方案
阻止事件冒泡,尽管这似乎不起作用。
你的意思是事件冒泡不起作用,或者只是模式一般不起作用?我发现了两个代码问题,修复后似乎使模式工作。此外,您可能想要 的行为e.preventDefault()
,但我不确定您的问题。
问题与修复:
- 方法签名中缺少道具:
const Modal = (props) => {
- 不使用
show
prop 显示/隐藏模态 div:props.show && <div className="modal__wrapper" onClick={props.toggle}>
stopPropagation & preventDefault
要查看 和 的行为差异stopPropagation
,请preventDefault
尝试将其添加radio
到您的按钮下方。每次需要重置以radio
进行实验时,您都需要刷新页面。
<input type="radio" name="gender" value="male" onClick={toggleModal}/>
preventDefault
停止radio
设置,它会阻止无线电组件的默认行为设置值。
stopPropagation
不会阻止设置radio
,因为它只会阻止事件冒泡到父元素。text <input>
防止诸如 Enter 键之类的事件影响<form>
要提交的父元素(如果需要)将很有用。
我希望这有助于解决您的问题。
推荐阅读
- javascript - React 测试库快照测试无法读取存储属性
- html - 打印列表时 pdfMake 和 html-to-pdfmake 的问题
- linux - 无法使用 curl 上传以 .zip 结尾的文件
- c# - 创建新的 guid 实例或在 Visual Studio 工具中选择 > 创建 guid 有什么区别?
- java - 如何使用 Lombok 的 @Builder 注释的类的 xml 配置创建 Spring Bean
- ios - 尝试添加功能以能够播放打印 UITableView
- java - 在 micronaut 中覆盖未找到的异常处理程序
- python - 启动 Django 后连续出现 404 错误
- javascript - 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端 node.js MongoDB 后无法设置标头
- django - 如何在 Django 中实现多种用户?