javascript - React onClose eventListener 未在 Safari 上触发
问题描述
我尝试使用react-dialog-polyfill,但是当我测试我的代码时,我知道 onClose 事件侦听器没有在 Safari 上触发,即使它在 Chrome 上工作。下面是 react-dialog-polyfill 中的代码。
import dialogPolyfill from 'dialog-polyfill';
const ModalBase = forwardRef((p, modal) => {
const {
children,
open,
ready,
onCancel,
onClose,
useAsModal,
...rest
} = p
useEffect(() => {
const self = modal.current
dialogPolyfill.registerDialog(self)
if (!self || !ready || self.open === open) return
const show = useAsModal ? () => self.showModal() : () => self.show()
const close = () => self.close()
const action = open ? show : close
action()
}, [ready, open, modal, useAsModal])
const onCancelWrap = e => {
e.preventDefault()
onCancel(e, modal.current)
}
const onCloseWrap = e => {
onClose(e, modal.current)
}
return (
<dialog {...rest}
ref={modal}
onCancel={onCancelWrap}
onClose={onCloseWrap}
>
{children}
</dialog>
)
})
然后我发现当我注释掉下面的 onCancel 和 onClose 部分时:
return (
<dialog {...rest}
ref={modal}
//onCancel={onCancelWrap}
//onClose={onCloseWrap}
>
{children}
</dialog>
)
并添加原生事件监听器,
useEffect(() => {
const self = modal.current
dialogPolyfill.registerDialog(self);
self.onclose=e => {
onClose(e, self)
}
self.oncancel=e => {
e.preventDefault()
onCancel(e, self)
}
有效。
我认为这是反应不调用 onClose 的问题<dialog onClose={onClose} />
这是 React 的问题吗?
解决方案
推荐阅读
- keras - 如何重置 keras/tensorflow 2.0 中的所有图形和变量?
- javascript - 我想在加载文档后隐藏一些东西并显示另一个
- java - 如何将数据从 HTML 发送到数据库(通过 thymeleaf 更新引用的对象)?
- python - 从python中的列表中查找包的最大次要版本
- javascript - 如何使用 React Router 嵌套一些路由?我想保留一个标题组件
- javascript - 如果任何元素为真,如何迭代任何数组以返回值“真”
- r - 在同一工作表中提取多个数据文件
- android - 无法在 WorkManager 中未调用 Looper.prepare() 的线程内创建处理程序
- ubuntu - 如何下载python2.7 2.7.6-8ubuntu0.5 debian包?
- vue.js - 使用 VueJS 的 Web 组件