You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js报错:Unhandled Runtime Error: Cancel rendering route 原因排查

报错原因及解决方法

报错原因

你在使用Next.js的<Link>组件时,触发了两个冲突的路由操作:

  • <Link href="#" 会触发浏览器默认的锚点跳转(跳转到当前页面顶部)
  • onClick里的router.push('/')又要执行跳转到首页的操作
    这两个路由操作同时触发,Next.js会取消其中一个渲染流程,因此抛出Cancel rendering route错误。

另外,<Link>组件的设计初衷是借助Next.js的路由预加载做性能优化,你用它绑定登出逻辑还手动调用router.push,违背了它的使用场景,也是问题的核心诱因。

解决方法

以下三种方案任选其一即可:

方案一:阻止Link默认行为

修改onClick事件,阻止浏览器默认的锚点跳转,只保留手动路由跳转逻辑:

<Link href="#" onClick={(e) => {
  e.preventDefault();
  logOut();
}} >
   Log out
</Link>

方案二:改用普通按钮组件

登出操作不需要路由预加载,直接用普通按钮更合理:

<button onClick={() => logOut()}>
  Log out
</button>

方案三:利用Link自身跳转能力

将<Link>的href设为首页地址,onClick仅处理登出的状态更新,无需手动调用router.push:

const logOut = () => {
  dispatch( setUserLogged(userData) )
  // 移除router.push('/')
}
<Link href="/" onClick={() => logOut()}>
  Log out
</Link>

内容的提问来源于stack exchange,提问作者Jhon Estrada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:12:39