Динамические маршруты и группы маршрутов
Создавайте динамические сегменты [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 — локальная установка не требуется.
Все уроки этого курса
- Соглашения об именовании файлов App Router
- Серверные и клиентские компоненты в Next.js
- Динамические маршруты и группы маршрутов
- API метаданных и SEO в App Router