NextJS 13 App目录下router.push硬导航后浏览器返回按钮致站点崩溃
排查Next.js App Router硬导航返回后Chrome卡死问题
- 优先检查
/account页面的组件渲染逻辑,重点盯无限循环或重复触发的状态更新:硬导航会重新初始化页面组件,要是组件里有无限触发的useEffect、没清理的订阅,或者状态更新逻辑导致反复重渲染,直接就能把CPU拉满。比如看看useEffect是不是缺依赖项,或者依赖项是每次渲染都生成新引用的对象/数组,导致无限执行。 - 确认路由跳转的
push调用规范:虽然AuthToggle里的跳转正常,但/到/account的跳转代码得检查有没有传额外参数导致路由状态异常。比如是不是在push时传了不稳定的状态值,或者错用了scroll/shallow配置。尽量用router.push('/account')这种最简调用,别加不必要的参数。 - 排查页面的Suspense/Streaming 逻辑:App Router默认开了Streaming,如果
/account页面用了Suspense但没处理好异步数据加载,硬导航后返回可能触发资源加载死循环。比如有没有异步组件在返回时反复触发加载,没正确缓存或终止请求。 - 排除浏览器环境干扰:换Chrome无痕模式测试,排除缓存或者第三方扩展(比如广告拦截、脚本注入类)的冲突。
- 针对你的仓库的具体检查点:
- 打开
app/account/page.tsx,看看有没有没清理的事件监听器、WebSocket连接,或者无限循环的状态更新代码。 - 对比AuthToggle组件和首页跳转至
/account的代码,找调用方式的差异,比如后者是不是在全局状态更新时重复执行push。 - 给
/account页面的useEffect加上清理函数,比如:useEffect(() => { // 业务逻辑代码 return () => { // 清理订阅、定时器、事件监听等资源 }; }, []);
- 打开
内容的提问来源于stack exchange,提问作者bztravis
相关产品推荐
相关产品推荐

