【Next.js】Route Groups
在 Next.js 的 App Router 架構中,Route Groups 是一個非常實用的功能,用來:
✅ 分組路由檔案,但不會影響 URL 路徑或頁面路由。
🗂️ Route Groups 是什麼?
語法:用括號 () 包住資料夾名稱
例如:
app/
├── (dashboard)/
│ └── analytics/
│ └── page.tsx ← URL: /analytics(不會變成 /dashboard/analytics)
✅ 路徑中的 (dashboard) 不會出現在網址上
但它可以讓你組織頁面、套用 layout。
📌 使用場景
| 使用目的 | 說明 |
|---|---|
| 組織頁面結構 | 讓你的 app 資料夾更乾淨、更有結構 |
| 不同區段共用不同 layout | 例如 (marketing)、(admin)、(auth) 區塊使用不同 layout |
| 不污染 URL | URL 不包含 group 名稱,例如 (admin)/users → /users |
✅ 範例 1:基本 Route Group
app/
├── (marketing)/
│ └── home/
│ └── page.tsx
訪問路徑: /home ✅
不會是: /marketing/home ❌
✅ 範例 2:共用 layout 的 Route Group
app/
├── (auth)/
│ ├── layout.tsx ← auth 區塊專用 layout
│ ├── login/
│ │ └── page.tsx ← `/login`
│ └── register/
│ └── page.tsx ← `/register`
👉 /login 和 /register 頁面都會套用 (auth)/layout.tsx
✅ 範例 3:巢狀 Route Groups
app/
├── (admin)/
│ ├── layout.tsx
│ └── users/
│ └── page.tsx ← `/users`
├── (marketing)/
│ └── about/
│ └── page.tsx ← `/about`
每個 group 都可以有自己專屬的 layout.tsx,但網址仍保持扁平化。
💡 搭配 not-found.tsx、error.tsx、loading.tsx
你可以在 group 中設:
app/
├── (admin)/
│ ├── layout.tsx
│ ├── not-found.tsx
│ ├── error.tsx
│ └── dashboard/
│ └── page.tsx
這樣 group 中的所有路由都會共用這些錯誤/狀態處理頁。
🚫 Route Groups 的注意事項
| 問題 | 說明 |
|---|---|
Group 名稱不能用 / 或 - |
只能用括號與英文小寫(無實際路徑名稱) |
| 不能與實體 URL 混用 | app/(admin)/users 是 /users,不是 /admin/users |
沒有 generateStaticParams() |
Route Group 自身不是 route,不能設 page.tsx |
✅ 小結
| 特性 | 說明 |
|---|---|
| 語法 | (group-name)/ |
| 是否會影響 URL? | ❌ 不會,純粹是分組與結構管理用途 |
| 支援 layout 嗎? | ✅ 支援,可針對 group 套用專屬 layout |
| 適合什麼用途? | 管理大型專案,區分功能區域(如 admin/auth/marketing) |