Next.js 链接与导航
在 Next.js 中,导航分为两大类:
- 声明式导航(通过
<Link>
组件)
- 命令式导航(通过
useRouter
API)
1. 声明式导航
使用 next/link
实现页面跳转:
1 2 3 4 5 6 7 8
| import Link from 'next/link';
<Link href="/blog">Blog</Link>
<Link href="/blog" replace>Blog</Link>
|
2. 获取当前路径
在客户端组件中,可以用 usePathname 获取当前路由路径:
1 2 3 4 5 6 7 8
| 'use client';
import { usePathname } from 'next/navigation';
export default function PathInfo() { const pathname = usePathname(); return <p>当前路径:{pathname}</p>; }
|
3. 参数(params)与搜索参数(searchParams)
在 Next.js 的 page.tsx 中,可以通过 props 获取路由参数和查询参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| export default async function Article({ params, searchParams, }: { params: Promise<{ articleId: string }>; searchParams: Promise<{ lang?: 'zh' | 'en' }>; }) { const { articleId } = await params; const { lang = 'en' } = await searchParams;
return <div>文章 ID: {articleId},语言: {lang}</div>; }
'use client'; import { use } from 'react';
export default function Article({ params, searchParams, }: { params: Promise<{ articleId: string }>; searchParams: Promise<{ lang?: 'zh' | 'en' }>; }) { const { articleId } = use(params); const { lang = 'en' } = use(searchParams);
return <div>文章 ID: {articleId},语言: {lang}</div>; }
|
参数说明
- params
动态路由参数,如 /articles/123 中的 articleId=123
- searchParams
查询参数,如 /articles/123?lang=zh 中的 lang=zh
- 注意:
- page.tsx 可以访问 params 和 searchParams
- layout.tsx 只能访问 params,无法访问 searchParams
4. 命令式导航(程序化导航)
在客户端组件中使用 useRouter 实现导航:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 'use client';
import { useRouter } from 'next/navigation';
export default function Navigator() { const router = useRouter();
return ( <div> <button onClick={() => router.push('/path')}>跳转</button> <button onClick={() => router.replace('/path')}>替换跳转</button> <button onClick={() => router.back()}>返回</button> <button onClick={() => router.refresh()}>刷新</button> </div> ); }
|
常用方法
- router.push(path):跳转到新路径
- router.replace(path):替换当前路径(不新增历史记录)
- router.back():返回上一页
- router.refresh():刷新当前页面数据
总结
- 静态跳转 用
- 动态跳转 用 useRouter
- params 获取动态路由参数
- searchParams 获取查询参数(仅在页面可用)
- 布局组件(layout)无法获取查询参数