App Router
Next.js 13 引入了全新的 App Router,基于 React Server Components 构建,提供了更强大的路由和布局能力。
路由约定
在 app/ 目录下,文件夹结构即路由结构:
app/
├── page.tsx → /
├── about/
│ └── page.tsx → /about
├── blog/
│ ├── page.tsx → /blog
│ └── [slug]/
│ └── page.tsx → /blog/:slug
每个路由段可包含以下特殊文件:
page.tsx— 页面 UIlayout.tsx— 共享布局loading.tsx— 加载状态error.tsx— 错误处理not-found.tsx— 404 页面
Layout(布局)
布局是在多个页面之间共享的 UI:
// app/layout.tsx
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="zh">
<body>
<nav>导航栏</nav>
{children}
<footer>页脚</footer>
</body>
</html>
)
}
动态路由
使用方括号 [param] 创建动态段:
// app/blog/[slug]/page.tsx
export default function BlogPost({
params,
}: {
params: { slug: string }
}) {
return <h1>文章:{params.slug}</h1>
}
路由组
用圆括号 (group) 组织路由,不影响 URL:
app/
├── (marketing)/
│ ├── about/page.tsx → /about
│ └── contact/page.tsx → /contact
├── (dashboard)/
│ ├── settings/page.tsx → /settings
│ └── profile/page.tsx → /profile