在发生之前检测导航事件 nextjs 13 应用程序路由器,然后防止其发生

ske*_*tor 8 navigation events router onbeforeunload next.js13

使用 nextjs 12(页面路由器),从“next/router”返回的路由器具有您可以侦听和适当处理的导航事件。是文档。

一个具体事件是routeChangeStart。当您希望在用户离开页面之前提示他们时,您已侦听该事件,然后打开一个模式并抛出错误以阻止导航。

对于 nextjs 13(应用程序路由器),从“next/navigation”返回的路由器不具有订阅事件的相同能力。

文档中有一个解决方案可以告诉您路线何时已更改。它使用两个新的钩子

  • usePathname
  • useSearchParams

是该解决方案。

我想在路线即将改变之前知道。

您如何知道 nextjs 13 应用程序(使用应用程序路由器)何时将要导航,以及如何阻止它这样做?

小智 0

如果您使用 Link 组件进行导航,则可以将其与自定义组件切换并使用 useRouter 挂钩。

  • 感谢您的回复@Shahryar_Jahanshahloo。我认为,如果所有内容都可以通过链接导航,那么使用“useRouter”挂钩的自定义链接组件是一个很好的解决方案。不幸的是,在网络浏览器中,情况并非如此。Nextjs 12 路由器事件考虑了浏览器后退和前进按钮的导航。我正在寻找能够处理这两种情况的解决方案 (2认同)