Next.js 路由组
介绍
在 Next.js 中,路由组(Route Groups)是一种强大的工具,允许你将相关的路由组织在一起,而不会影响 URL 结构。这对于大型应用程序尤其有用,因为它可以帮助你更好地管理路由文件,同时保持 URL 的简洁性。
路由组的主要特点包括:
- 不影响 URL 结构:路由组不会改变 URL 路径。
- 组织代码:通过将相关的路由文件放在同一个文件夹中,可以更清晰地组织代码。
- 共享布局:可以在路由组中共享布局组件,减少重复代码。
基本用法
在 Next.js 中,路由组是通过在文件夹名称中使用括号 ()
来定义的。例如,假设你有一个博客应用程序,你可以将所有的博客相关路由放在一个名为 (blog)
的文件夹中。
示例结构
plaintext
app/
├── (blog)/
│ ├── page.tsx
│ ├── [slug]/
│ │ └── page.tsx
├── page.tsx
在这个结构中,(blog)
是一个路由组。它包含两个路由:
/blog
:显示博客列表。/blog/[slug]
:显示单个博客文章。
代码示例
app/(blog)/page.tsx
tsx
export default function BlogPage() {
return <div>Blog List</div>;
}
app/(blog)/[slug]/page.tsx
tsx
export default function BlogPost({ params }: { params: { slug: string } }) {
return <div>Blog Post: {params.slug}</div>;
}
app/page.tsx
tsx
export default function HomePage() {
return <div>Home Page</div>;
}
输出
- 访问
/
将显示Home Page
。 - 访问
/blog
将显示Blog List
。 - 访问
/blog/my-first-post
将显示Blog Post: my-first-post
。
备注
路由组的文件夹名称不会出现在 URL 中。例如,(blog)
文件夹中的路由 /blog
仍然会映射到 /blog
,而不是 /(blog)/blog
。
共享布局
路由组的一个强大功能是可以在组内共享布局。你可以在路由组中创建一个 layout.tsx
文件,该布局将应用于组内的所有路由。
示例结构
plaintext
app/
├── (blog)/
│ ├── layout.tsx
│ ├── page.tsx
│ ├── [slug]/
│ │ └── page.tsx
├── page.tsx
app/(blog)/layout.tsx
tsx
export default function BlogLayout({ children }: { children: React.ReactNode }) {
return (
<div>
<h1>Blog Layout</h1>
{children}
</div>
);
}
app/(blog)/page.tsx
tsx
export default function BlogPage() {
return <div>Blog List</div>;
}
app/(blog)/[slug]/page.tsx
tsx
export default function BlogPost({ params }: { params: { slug: string } }) {
return <div>Blog Post: {params.slug}</div>;
}
输出
- 访问
/blog
将显示:plaintextBlog Layout
Blog List - 访问
/blog/my-first-post
将显示:plaintextBlog Layout
Blog Post: my-first-post
提示
通过在路由组中共享布局,你可以避免在每个页面中重复相同的布局代码,从而提高代码的可维护性。
实际应用场景
假设你正在开发一个电子商务网站,你可能有以下路由:
/products
:显示产品列表。/products/[id]
:显示单个产品详情。/cart
:显示购物车页面。/checkout
:显示结账页面。
你可以使用路由组来组织这些路由:
plaintext
app/
├── (shop)/
│ ├── products/
│ │ ├── page.tsx
│ │ ├── [id]/
│ │ │ └── page.tsx
│ ├── cart/
│ │ └── page.tsx
│ ├── checkout/
│ │ └── page.tsx
├── page.tsx
通过这种方式,你可以将所有的商店相关路由放在 (shop)
路由组中,而不会影响 URL 结构。
总结
Next.js 路由组是一种强大的工具,可以帮助你更好地组织和管理应用程序的路由。通过使用路由组,你可以:
- 保持 URL 结构的简洁性。
- 将相关的路由组织在一起,提高代码的可读性和可维护性。
- 在路由组中共享布局,减少重复代码。
附加资源
练习
- 创建一个新的 Next.js 项目,并尝试使用路由组来组织你的路由。
- 在一个路由组中创建一个共享布局,并应用于组内的所有路由。
- 尝试在路由组中嵌套另一个路由组,看看 URL 结构如何变化。
通过完成这些练习,你将更好地理解 Next.js 路由组的使用方法和优势。