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

Next.js 13.2 App目录构建报错:location not found 求助

问题分析

你的问题出在组件渲染阶段直接调用router.replace()。开发模式下客户端环境初始化较快,不会触发错误,但Next.js构建时会对组件进行静态分析,此时客户端路由实例还未完全初始化,调用router.replace()就会抛出"location not found"错误。

解决方案

把登录校验和跳转逻辑放到useEffect钩子中执行——useEffect会在客户端组件挂载完成后运行,此时路由环境已经准备就绪:

"use client";
import { useRouter, useEffect } from "next/navigation";
import { useState } from "react";

export default function Approve() {
  const router = useRouter();
  const loggedUser = getLoggedUser();
  const [code, setCode] = useState("");

  useEffect(() => {
    // 客户端挂载完成后检查登录状态并执行跳转
    if (!loggedUser) {
      router.replace("/login");
    }
  }, [loggedUser, router]);

  // 未登录时返回空内容或加载组件,避免渲染后续不必要的内容
  if (!loggedUser) {
    return null; // 也可自定义<Loading />组件替代
  }

  // 后续组件业务逻辑
  ...
}
补充注意事项
  • 路由跳转这类副作用操作,绝对不能放在组件顶层渲染逻辑中,必须放在useEffect或事件回调(比如按钮点击事件)里执行。
  • 未登录状态下返回空内容/加载组件,能避免组件继续渲染依赖登录状态的内容,减少潜在报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:04:57