【发布时间】:2020-09-22 18:24:53
【问题描述】:
我正在尝试通过 Gatsby 实现以下目标
- 用户在表单页面上,如果他们点击浏览器的返回按钮,会出现一个弹出窗口,询问他们是否要离开。
- 如果用户选择
ok,则返回。 - 如果用户选择
cancel,那么它将停留在此页面上
通过执行以下操作,我能够“几乎”实现它
useEffect(() => {
const confirmExit = e => {
const leaveThisPage = window.confirm("Would you like to leave this page?")
if (!leaveThisPage) {
window.history.forward()
}
}
window.addEventListener("popstate", confirmExit)
return () => {
window.removeEventListener("popstate", confirmExit)
}
}, [])
有一个问题,如果用户选择cancel,那么浏览器会转到上一页。然后window.history.forward() 会触发并将它们发送回去。
我注意到popstate 事件无法取消,因此e.preventDefault() 将不起作用。
注意:我也尝试使用window.onbeforeunload 进行测试,但它仅在我关闭窗口或我之前来自我的应用程序之外时触发。我的问题有解决办法吗?
【问题讨论】:
标签: reactjs gatsby browser-history browser-api