javascript - NextJs不会触发 beforeunload 事件。尝试在离开页面前提示用户
问题描述
我试图在离开页面之前提示用户。我注意到当用户从元素链接进入页面然后当我点击返回时,触发 beforeunload 事件。
但是,当用户通过 NextJs Link 组件进入页面时,单击返回不会触发 beforeunload 事件。
使用组件时如何提示用户?
例如,通过此链接访问页面并单击返回不会触发 beforeunload
<Link href={`/event/${encodeURIComponent(event.slug)}`}>
<a>
<h3>{event.name}</h3>
</a>
</Link>
但是在单击返回时,常规的元素链接随后会触发 beforeunload
例子
<a href={"event/" + event.slug}>
<h3>{event.name}</h3>
</a>
解决方案
根据Next.js文档,当您使用该Link
组件时:
可以通过 next/link 导出的 Link 组件启用路由之间的客户端转换。Next.js 路由器允许您在页面之间进行客户端路由转换,类似于单页应用程序。
您正在使用该Link
组件来更改您的路线,因此它被认为您在一个页面上(甚至多次来回)。
Window: beforeunload event
现在,看看MDN:
当窗口、文档及其资源即将被卸载时,会触发 beforeunload 事件。文档仍然可见,此时事件仍然可以取消。
因此,当您使用Link
提到的特定组件时,这不是正确的行为。
作为解决问题的解决方案,您可以添加useEffect
钩子并对其或cleanup
方法执行适当的操作。例如,将您的函数useEffect
放在所需页面上,以便在组件确实安装时调用。这样,随着路由或页面的每次更改,useEffect
都会触发。
推荐阅读
- android - app:cornerRadius 不适用于 MaterialButton
- javascript - 循环播放音频有限次数
- python - 如何就地更新数据类?
- java - 有没有办法从 JSON url 加载图片?
- c++ - opencv c ++将ipl更改为mat累积
- azure-ad-b2c - 在 Azure AD B2C 下使用 Apple 登录
- azure-devops - 在 Azure Devops 中,如何创建显示迭代开始日期和结束日期的查询?
- php - Visual Studio Code PHP Intelephense 不断显示不必要的错误
- java - 添加和显示列表对象
- amazon-web-services - 将多个输入传递到 AWS Step Function 中的 Map State