在下一个我怎么能停止路由器导航在Next.js。
我正在尝试使用routerChangeStart
事件停止导航。
useEffect(() => {
const handleRouteChange = (url: string): boolean => {
if (dirty) {
return false;
}
return true;
};
Router.events.on('routeChangeStart', handleRouteChange);
return () => {
Router.events.off('routeChangeStart', handleRouteChange);
};
}, []);
5条答案
按热度按时间zysjyyx41#
感谢@raimohanska提供的好的解决方案。我做了一个小的更新,包括确认页面重新加载以及:
用法:
o2gm4chl2#
似乎没有完美的方法,但我用这个小技巧来处理它:
此代码将中断更改路线(使用nextJs Route和浏览器刷新/关闭选项卡操作)
brjng4g33#
您可以编写自定义钩子。
灵感来自:https://github.com/vercel/next.js/discussions/12348#discussioncomment-8089
3htmauhk4#
下面是我的自定义钩子解决方案,它似乎可以解决这个问题,用TypeScript编写。
您可以在组件中使用它,如下所示:
jmo0nnb35#
你需要做一个钩子来阻止路由器的改变。但是为了让它正常工作,你应该知道你的表单是否是原始的。为了用
react-final-form
做到这一点,他们有一个FormSpy
组件可以订阅:@raimohanska建议的Typescript钩子对我很有效: