0Pricing
React Academy · Урок

Динамические маршруты и группы маршрутов

Создавайте динамические сегменты [slug], группы маршрутов с помощью (folder) и параллельные маршруты.

«Динамические маршруты и группы маршрутов» — бесплатный урок React Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Динамические сегменты

Заключите имя папки в квадратные скобки, чтобы создать динамический сегмент. Его значение доступно в params, передаваемом странице.

// app/products/[id]/page.tsx
export default function ProductPage({ params }: { params: { id: string } }) {
  return <h1>Product {params.id}</h1>;
}
// → /products/123 → params.id = '123'

Типизированные параметры

Параметры в URL всегда являются строками. Явно преобразуйте их, если идентификаторы имеют числовой тип.

export default async function PostPage({ params }: { params: { slug: string } }) {
  const post = await getPostBySlug(params.slug);
  if (!post) notFound();
  return <article>{post.content}</article>;
}

Сегменты с захватом всего пути

Используйте [...slug], чтобы сопоставить любое количество сегментов пути. Значением будет массив строк.

// app/docs/[...path]/page.tsx
export default function DocsPage({ params }: { params: { path: string[] } }) {
  // /docs/react/hooks → params.path = ['react', 'hooks']
  return <DocViewer path={params.path} />;
}

Необязательный захват всего пути

[[...slug]] также сопоставляет корневой сегмент — это удобно для необязательных префиксов пути.

// app/[[...lang]]/page.tsx
// Matches /, /en, /en/about, /fr/products/123
export default function Page({ params }: { params: { lang?: string[] } }) {
  const lang = params.lang?.[0] ?? 'en';
  return <div lang={lang}>...</div>;
}

generateStaticParams

Экспортируйте generateStaticParams(), чтобы предварительно отображать динамические маршруты во время сборки и создавать статический HTML для каждой комбинации параметров.

export async function generateStaticParams() {
  const posts = await getPosts();
  return posts.map(p => ({ slug: p.slug }));
}
// → builds /blog/hello-world, /blog/react-tips etc. statically

Группы маршрутов — (папка)

Заключите имя папки в круглые скобки, чтобы создать группу маршрутов. Она организует файлы, не добавляя сегмент в URL.

// File structure:
// app/(marketing)/about/page.tsx → /about
// app/(marketing)/blog/page.tsx  → /blog
// app/(app)/dashboard/page.tsx   → /dashboard
// (marketing) and (app) don't appear in URLs

Группы маршрутов с общими макетами

У каждой группы маршрутов может быть собственный layout.tsx, благодаря чему разные разделы получают разные макеты без вложенности в URL.

// app/(marketing)/layout.tsx — marketing shell
// app/(app)/layout.tsx — authenticated app shell
// Both groups share app/layout.tsx as the root

Параллельные маршруты — @slot

Добавьте префикс @ к имени папки, чтобы создать слот. Слоты одновременно отображаются в родительском макете — это удобно для модальных окон, разделенного экрана или вкладок.

// app/@modal/login/page.tsx
// app/layout.tsx
export default function RootLayout({ children, modal }) {
  return (
    <div>
      {children}
      {modal} {/* renders @modal/login/page.tsx side by side */}
    </div>
  );
}

Перехватывающие маршруты — (..)

Используйте обозначение (..), чтобы перехватить маршрут и отобразить его встроенным образом (например, открыть фотографию в модальном окне вместо перехода на новую страницу).

// Soft navigation shows modal:
// app/@modal/(..)/photos/[id]/page.tsx
// Hard navigation shows full page:
// app/photos/[id]/page.tsx

Динамические метаданные маршрута

Экспортируйте асинхронную функцию generateMetadata в динамических маршрутах, чтобы задавать SEO-теги для каждой страницы на основе параметров маршрута.

export async function generateMetadata({ params }: { params: { id: string } }) {
  const product = await getProduct(params.id);
  return { title: product.name, description: product.description };
}

Быстрая проверка

Что происходит в маршрутизаторе App Next.js, если заключить имя папки в круглые скобки?

Итоги

[id] создает динамические сегменты, [...slug] перехватывает все вложенные пути, а [[...slug]] делает их необязательными. Группы маршрутов с (name) организуют код без влияния на URL и позволяют создавать макеты для отдельных групп. Используйте generateStaticParams для предварительного отображения во время сборки.

Часто задаваемые вопросы

Урок «Динамические маршруты и группы маршрутов» бесплатный?

Да — полный текст урока «Динамические маршруты и группы маршрутов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Динамические маршруты и группы маршрутов»?

Создавайте динамические сегменты [slug], группы маршрутов с помощью (folder) и параллельные маршруты. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Динамические маршруты и группы маршрутов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Соглашения об именовании файлов App Router
  2. Серверные и клиентские компоненты в Next.js
  3. Динамические маршруты и группы маршрутов
  4. API метаданных и SEO в App Router
← Назад к React Academy