Route Group — (group) — URL ga ta'sir qilmasdan guruhlash
Muammodan boshlaylik
Siz loyihada ikkita xil layout kerak:
- Marketing sahifalar (
/,/about,/pricing) — Navbar, Footer bilan - Auth sahifalar (
/login,/register) — faqat markazlashgan forma, Navbar yo'q - Dashboard sahifalar (
/dashboard,/dashboard/settings) — Sidebar bilan
Agar hammasi app/ da bo'lsa — bitta layout.tsx barchaga qo'llanadi. Har bir sahifada if (route === '/login') tekshiruvi yozish kerak bo'ladi.
Route Group bu muammoni hal qiladi — papkalarni URL ga kirmagan holda guruhlash.
Qanday ishlaydi
Papka nomini qavsga olish — u URL ga kirmaydi, faqat fayl tizimida guruh bo'ladi:
app/
├── (marketing)/
│ ├── layout.tsx ← Navbar + Footer
│ ├── page.tsx → /
│ ├── about/
│ │ └── page.tsx → /about
│ └── pricing/
│ └── page.tsx → /pricing
│
├── (auth)/
│ ├── layout.tsx ← faqat markazlashgan forma
│ ├── login/
│ │ └── page.tsx → /login
│ └── register/
│ └── page.tsx → /register
│
└── (dashboard)/
├── layout.tsx ← Sidebar
├── dashboard/
│ └── page.tsx → /dashboard
└── dashboard/
└── settings/
└── page.tsx → /dashboard/settings
(marketing), (auth), (dashboard) — URL da ko'rinmaydi. Faqat layout larni ajratish uchun.
Har bir guruh uchun layout
// app/(marketing)/layout.tsx
export default function MarketingLayout({ children }) {
return (
<>
<header>
<nav>Logo | Sahifalar | Kirish</nav>
</header>
<main>{children}</main>
<footer>© 2026</footer>
</>
)
}
// app/(auth)/layout.tsx
export default function AuthLayout({ children }) {
return (
<div style={{
minHeight: '100vh',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}}>
{children} {/* faqat forma, Navbar yo'q */}
</div>
)
}
// app/(dashboard)/layout.tsx
export default function DashboardLayout({ children }) {
return (
<div style={{ display: 'flex' }}>
<aside>Sidebar</aside>
<main>{children}</main>
</div>
)
}
Har bir guruh o'z layoutiga ega. /login ga kirganda — faqat (auth)/layout.tsx qo'llanadi, Navbar ko'rinmaydi.
Bir xil URL, turli layout
Route Group ning yana bir foydasi — bir xil URL prefixida turli layoutlar:
app/
├── (shop)/
│ ├── layout.tsx ← do'kon layouti
│ └── products/
│ └── page.tsx → /products
│
└── (blog)/
├── layout.tsx ← blog layouti
└── products/ ← bir xil nom, boshqa guruh
└── page.tsx → /products ← xato! to'qnashadi
⚠️ Bir xil URL ikki guruhda bo'lsa — Next.js xato beradi. Route Group URL ni o'zgartirmaydi, shuning uchun to'qnashuv bo'ladi.
Root layout bilan birga
Root app/layout.tsx — barcha guruhlarga qo'llanadi. Guruh layoutlari uning ichida ishlaydi:
app/layout.tsx ← hammaga (html, body, font, global CSS)
└── (marketing)/layout.tsx ← faqat marketing sahifalarga
└── (auth)/layout.tsx ← faqat auth sahifalarga
└── (dashboard)/layout.tsx ← faqat dashboard sahifalarga
Root layout da faqat umumiy narsalar — <html>, <body>, global font, global CSS.
Kod tashkil qilish uchun
Route Group faqat layout ajratish uchun emas — katta loyihalarda kodni tartibli saqlash uchun ham ishlatiladi:
app/
├── (auth)/
│ ├── login/page.tsx
│ └── register/page.tsx
├── (main)/
│ ├── page.tsx
│ ├── about/page.tsx
│ └── contact/page.tsx
└── (admin)/
├── admin/page.tsx
└── admin/users/page.tsx
Guruhlar ichida bir xil mavzudagi sahifalar — topish oson, boshqarish oson.
Tez-tez uchraydigan xatolar
1. Route Group URL ga kiradi deb o'ylash
// app/(auth)/login/page.tsx
// ❌ — bunday URL yo'q
/auth/login
// ✅ — to'g'ri URL
/login
2. Bir xil URL ikki guruhda
// ❌ — ikkalasi ham /about ga map bo'ladi — xato
app/(marketing)/about/page.tsx
app/(info)/about/page.tsx
// ✅ — har xil URL
app/(marketing)/about/page.tsx → /about
app/(info)/company/about/page.tsx → /company/about
3. Root layout ni guruh ichiga qo'yish
// ❌ — root layout app/ da bo'lishi shart
app/(main)/layout.tsx ← bu root layout emas
// ✅
app/layout.tsx ← root layout
app/(main)/layout.tsx ← guruh layouti
Xulosa
Route Group — (nom) — URL ga kirmaydi, faqat fayl tizimida guruh.
(marketing) → Navbar + Footer layout
(auth) → markazlashgan forma layout, Navbar yo'q
(dashboard) → Sidebar layout
URL: /login (auth ko'rinmaydi)
URL: /about (marketing ko'rinmaydi)
Bir xil URL ikki guruhda bo'lmaydi — to'qnashadi.
Keyingi dars
26-dars: Parallel Route — @slot — bir sahifada bir nechta kontent
Bir sahifada bir vaqtda ikki xil kontent ko'rsatish — masalan, modal va asosiy sahifa bir vaqtda.