路由组
在 app
目录中,嵌套文件夹通常映射到 URL 路径。但是,您可以将文件夹标记为**路由组**,以防止文件夹包含在路由的 URL 路径中。
这允许您将路由段和项目文件组织成逻辑组,而不会影响 URL 路径结构。
路由组对于以下方面很有用:
- 将路由组织成组,例如按站点部分、意图或团队组织。
- 启用在同一路由段级别嵌套布局
- 将加载骨架添加到公共细分市场中的特定路由
约定
可以通过将文件夹名称括在括号中来创建路由组:(folderName)
示例
组织路由而不影响 URL 路径
要组织路由而不影响 URL,请创建一个组以将相关路由放在一起。括号中的文件夹将从 URL 中省略(例如 (marketing)
或 (shop)
)。


即使 (marketing)
和 (shop)
中的路由共享相同的 URL 层次结构,您也可以通过在其文件夹中添加 layout.js
文件为每个组创建不同的布局。


将特定段落纳入布局
要将特定路由纳入布局,请创建一个新的路由组(例如 (shop)
),并将共享相同布局的路由移动到该组(例如 account
和 cart
)。组外的路由将不共享布局(例如 checkout
)。


在特定路由上选择加载骨架
要通过 loading.js
文件将加载骨架应用于特定路由,请创建一个新的路由组(例如 /(overview)
),然后将您的 loading.tsx
移动到该路由组中。


现在,loading.tsx
文件将仅应用于您的仪表板→概述页面,而不是所有仪表板页面,而不会影响 URL 路径结构。
创建多个根布局
要创建多个根布局,请删除顶层 layout.js
文件,并在每个路由组中添加 layout.js
文件。这对于将应用程序划分为具有完全不同 UI 或体验的部分很有用。需要将 <html>
和 <body>
标记添加到每个根布局中。


在上面的示例中,(marketing)
和 (shop)
都有自己的根布局。
需知:
- 路由组的命名除了用于组织之外没有特殊意义。它们不会影响 URL 路径。
- 包含路由组的路由**不应**解析为与其他路由相同的 URL 路径。例如,由于路由组不会影响 URL 结构,因此
(marketing)/about/page.js
和(shop)/about/page.js
都将解析为/about
并导致错误。- 如果您使用多个根布局但没有顶级
layout.js
文件,则您的主页page.js
文件应在一个路由组中定义,例如:app/(marketing)/page.js
。- 在**多个根布局之间导航**将导致**完整页面加载**(而不是客户端导航)。例如,从使用
app/(shop)/layout.js
的/cart
导航到使用app/(marketing)/layout.js
的/blog
将导致完整页面加载。这**仅**适用于多个根布局。
这对您有帮助吗?