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

Next.js App Router下基于目录结构动态计算Link的href值

解决方案

在level-1页面的组件中,直接使用不带开头斜杠的相对路径即可,Next.js会自动基于当前路由(/level-1)拼接目标路径:

import Link from 'next/link';

export default function Level1Page() {
  // 自动指向 /level-1/level-2
  return <Link href="level-2">跳转到level-2页面</Link>;
}

这个方式同时支持服务器组件和客户端组件,无需额外逻辑。

2. 动态获取当前路径拼接(客户端组件)

如果需要更灵活的路径处理(比如动态生成多个子路径),在客户端组件中可以用usePathname:

'use client';

import Link from 'next/link';
import { usePathname } from 'next/navigation';

export default function Level1Page() {
  const currentPath = usePathname(); // 当前路径:/level-1
  const targetPath = `${currentPath}/level-2`;

  return <Link href={targetPath}>跳转到level-2页面</Link>;
}

3. 动态获取当前路径拼接(服务器组件)

服务器组件无法使用usePathname,可以通过headers()解析请求URL来获取当前路径:

import Link from 'next/link';
import { headers } from 'next/headers';

export default function Level1Page() {
  const headerList = headers();
  const requestUrl = new URL(headerList.get('next-url') || '');
  const currentPath = requestUrl.pathname; // 当前路径:/level-1
  const targetPath = `${currentPath}/level-2`;

  return <Link href={targetPath}>跳转到level-2页面</Link>;
}

4. 适配动态路由场景

如果level-1是动态路由(比如/[category]/page.js),可以直接通过路由参数拼接路径:

import Link from 'next/link';

export default function Level1Page({ params }) {
  // params.category 就是动态路由的参数值(比如"level-1")
  const targetPath = `/${params.category}/level-2`;
  
  return <Link href={targetPath}>跳转到level-2页面</Link>;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:00:14