Урок 01

Файловый роутинг

В App Router маршруты создаются папками внутри app/. Каждая папка — сегмент URL.

Базовые правила

  • Папка = сегмент URL
  • page.tsx делает сегмент доступным
  • Папка без page.tsx не создаёт маршрут
app/
├── page.tsx              → /
├── about/
│   └── page.tsx          → /about
├── blog/
│   ├── page.tsx          → /blog
│   └── post/
│       └── page.tsx      → /blog/post

Файлы, которые создают маршруты

  • page.tsx — страница
  • route.ts — API-роут

Другие файлы (layout, loading, error) маршрутов не создают.

Приватные папки

Папки с _ в начале исключаются из роутинга:

app/
├── _components/
│   └── Button.tsx        → не маршрут
├── _lib/
│   └── utils.ts          → не маршрут
└── page.tsx              → /

Используется для колокации: компоненты рядом с использующими их страницами.

Группы маршрутов

Папки в (скобках) не попадают в URL:

app/
├── (marketing)/
│   ├── about/page.tsx     → /about
│   └── pricing/page.tsx   → /pricing
└── (shop)/
    ├── cart/page.tsx      → /cart
    └── checkout/page.tsx  → /checkout

Для группировки по layout или логике. URL не содержит marketing или shop.

Несколько групп с одним URL

Нельзя, если создаёт конфликт. /about только в одной группе.

Вложенные папки

app/
├── dashboard/
│   ├── page.tsx           → /dashboard
│   ├── settings/
│   │   └── page.tsx       → /dashboard/settings
│   └── profile/
│       └── page.tsx       → /dashboard/profile

Соглашения об именовании

  • kebab-case для URL: my-page
  • camelCase или kebab-case для папок
  • Не используй пробелы и спецсимволы

Специальные файлы

В каждой папке могут быть:

  • page.tsx — страница
  • layout.tsx — layout
  • loading.tsx — загрузка
  • error.tsx — ошибка
  • not-found.tsx — 404
  • route.ts — API
  • template.tsx — пересоздаваемый layout
  • default.tsx — для параллельных маршрутов

Итоги

  • Папки в app/ — маршруты
  • page.tsx делает сегмент доступным
  • _folder — приватная папка
  • (group) — группа без URL
  • kebab-case для URL
  • Специальные файлы для layout, loading, error