node.js - React - onbeforeunload 事件从未触发
问题描述
当我的反应应用程序关闭时,我需要运行代码以清除本地存储中的数据。我已经尝试过我在类似问题中看到的内容,但我的 onbeforeunload 代码似乎永远不会运行(如果这很重要,我在 chrome 上)。
App.tsx 代码:
handleWindowClose() // never gets run
{
var value = window.localStorage.getItem('tabs')
if (value !== null) {
var loc = +value // convert to num
window.localStorage.setItem('tabs', (loc - 1).toString());
}
}
componentWillMount()
{
var handle = this.handleWindowClose
window.addEventListener('onbeforeunload', (ev: any) => {
// breakpoints in here do not trigger, alert does not show up
// adding a long loop to delay does not actually delay the close operation
ev.preventDefault();
alert('you are closing')
handle()
});
}
有谁知道为什么我的 onbeforeunload 事件永远不会触发?
更新我尝试使用 onbeforeunload、onpagehide 和 onunload 事件。它们似乎都没有在 chrome 中运行。
解决方案
从“onbeforeunload”中删除“on”,它应该可以工作。以防万一,我创建了一个快速操场来演示它应该如何实现。
基本上,我设置了一个效果挂钩来每秒读取一次本地存储,另一个效果挂钩在 2.5 秒后延迟写入本地存储,另一个效果实现“前卸载”。如果您将其注释掉,您将看到该消息在没有加载的情况下显示(因为它没有被删除)。
'beforeunload' 的实现:
React.useEffect(() => {
const onBeforeUnload = (ev) => {
localStorage.removeItem("message");
};
window.addEventListener("beforeunload", onBeforeUnload);
return () => window.removeEventListener("beforeunload", onBeforeUnload);
}, []);
推荐阅读
- c# - AZURE_FUNCTIONS_ENVIRONMENT 与 ASPNETCORE_ENVIRONMENT
- java - 为什么带有交叉表输出到 excel 的 JasperReport 会因大量列而失败?
- python - 如何获得图像中单个蒙面细胞强度的直方图?
- spring-boot - 带有 TaskListener @Autowired 问题的 Alfresco Process Services
- azure - 如何通过 Azure REST API 请求访问我的 AAD/Application Insights 应用程序的 IP/主机名?
- c# - 如何在不停止的情况下多次执行一个couroutine?
- google-cloud-platform - terraform(0.11 和 0.12)适用于一台机器,但不适用于另一台机器
- python - 在python中返回一个字符串
- powershell - 使用 Powershell 从 TFS 源代码控制下载文件适用于任何地方,但构建定义
- python - Python List 或 Tuple 的不同 SQLite 查询结果