javascript - 在 React 中确认警报后 onDelete 不起作用
问题描述
在用户离开 React 页面之前,确认警报会显示。如果他们回答是,我想运行onDelete()
。onDelete()
如果他们也响应 NO ,则运行以下代码。
componentDidMount() {
this.setupBeforeUnloadListener();
}
setupBeforeUnloadListener() {
window.addEventListener("beforeunload", (event) => {
event.returnValue = `Are you sure you want to leave?`;
this.onDelete();
})
}
onDelete()
只有当用户在确认警报中响应“是”时,我才能运行。
解决方案
您可以尝试将unload
事件与beforeunload
. beforeunload
会给用户取消卸载的机会,unload
如果用户没有取消卸载,就会触发该事件。
请注意,大多数浏览器会忽略任何自定义提示字符串 https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#Browser_compatibility
当此事件返回(或将 returnValue 属性设置为)非 null 或 undefined 的值时,将提示用户确认页面卸载。在旧浏览器中,事件的返回值显示在此对话框中。从 Firefox 44、Chrome 51、Opera 38 和 Safari 9.1 开始,将显示不受网页控制的通用字符串,而不是返回的字符串。例如:
Firefox 显示字符串“此页面要求您确认是否要离开 - 您输入的数据可能不会被保存。” (参见错误 588292)。Chrome 会显示字符串“您要离开此站点吗?您所做的更改可能无法保存。” (请参阅 Chrome 平台状态)。
此外,如果您的 onDelete() 函数执行任何异步操作,则不能保证完成。有关更多信息,请参阅此讨论:卸载事件之前使用的限制是什么?
推荐阅读
- kubernetes - 在 minikube 上运行的微服务应用程序正在运行,但未显示评论部分
- excel - 如何在excel中制作多个相似列的聚集条形图?
- maven - SBT 设置 http 标头(maven usePreemptive 标志的解决方法)
- keras - ModuleNotFoundError:没有名为“keras.api”的模块
- javascript - $ timeout <5> && react-scripts start && 此时出乎意料
- angular - Angular Ngx数据表如何在页面分页器中调用函数
- mysql - 执行 db:reset 时如何修复迁移添加的列已存在?
- c# - 如何使用 AutoMapper 将 POCO 映射到 Record 中
- sql - 如何在 Python 中通过表名作为参数从 sqlite3 DB 进行安全 SELECT?
- python - Pandas python,如何将列表中的列变成DataFrame,并从不必要的信息中清除它