跳到主內容

【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.tsxerror.tsxloading.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)