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

NextJS执行npm run build报错:NextRouter未挂载问题求助

解决NextJS构建时「NextRouter was not mounted」错误

问题场景

在NextJS项目的RootLayout组件中引入了带有"use client"指令的Header2组件,该组件原本通过useRouter判断当前路由,为对应导航链接添加CSS类,但执行npm run build时触发「NextRouter was not mounted」错误。

报错信息

info  - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/basic-features/eslint#disabling-rules
- info Linting and checking validity of types
- info Collecting page data
[==  ] - info Generating static pages (15/16)Error: NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted
    at useRouter (C:\test\frontend\.next\server\chunks\43.js:6026:15)
    at Header2 (C:\test\frontend\.next\server\app\page.js:544:74)
    at jg (C:\test\frontend\node_modules\next\dist\compiled\react-dom\cjs\react-dom-server.edge.production.min.js:117:273)
    at jg (C:\test\frontend\node_modules\next\dist\compiled\react-dom\cjs\react-dom-server.edge.production.min.js:123:11)
    at Z (C:\test\frontend\node_modules\next\dist\compiled\react-dom\cjs\react-dom-server.edge.production.min.js:124:91)
- info Generating static pages (16/16)

> Export encountered errors on following paths:
        /page: /

解决思路

NextJS 13+的App Router体系下,next/router是Pages Router的专属API,在App Router中需使用next/navigation提供的usePathname钩子获取当前路由路径。即使组件添加了"use client",静态构建阶段服务器仍会预渲染该组件,useRouter在此环境下无法正常初始化,替换为usePathname即可解决问题。

修改后的Header2代码

"use client";
import React, { useState } from 'react';
import Link from 'next/link';
// 替换useRouter为App Router的usePathname
import { usePathname } from 'next/navigation';

const navLinks = [
    { href: '/home', label: 'home' },
    { href: '/test', label: 'test' },
];

const Header2 = () => {
    const [isMenuOpen, setIsMenuOpen] = useState(false);
    const pathname = usePathname();

    const toggleMenu = () => {
        setIsMenuOpen(!isMenuOpen);
    };

    const isLinkActive = (href) => {
        // 用pathname替代router.pathname
        return pathname === href ? 'text-gray-300' : 'text-white';
    };

    return (
        <header className="bg-gray-800 text-white py-4 px-10 md:px-0">
            <nav className="container mx-auto flex items-center justify-between">
                <Link href="/" className="text-2xl font-bold">
                    Site test
                </Link>

                <div className="md:flex md:space-x-4 hidden">
                    {navLinks.map((link) => (
                        <Link key={link.href} href={link.href} className={`p-2 ${isLinkActive(link.href)} hover:text-gray-300`}>
                            {link.label}
                        </Link>
                    ))}
                </div>

            </nav>

        </header>
    );
};

export default Header2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:12:50