Dynamiczne trasy i grupy tras
Tworzenie dynamicznych segmentów [slug], grup tras z (folder) oraz tras równoległych.
Dynamiczne trasy i grupy tras to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Segmenty dynamiczne
Umieść nazwę folderu w nawiasach kwadratowych, aby utworzyć segment dynamiczny. Wartość jest dostępna w obiekcie params przekazywanym do strony.
// app/products/[id]/page.tsx
export default function ProductPage({ params }: { params: { id: string } }) {
return <h1>Product {params.id}</h1>;
}
// → /products/123 → params.id = '123'Typowane parametry
Parametry w adresie URL są zawsze ciągami znaków. W przypadku identyfikatorów liczbowych należy jawnie je przekonwertować.
export default async function PostPage({ params }: { params: { slug: string } }) {
const post = await getPostBySlug(params.slug);
if (!post) notFound();
return <article>{post.content}</article>;
}Segmenty przechwytujące wszystkie ścieżki
Użyj [...slug], aby dopasować dowolną liczbę segmentów ścieżki. Wartość jest tablicą ciągów znaków.
// 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} />;
}Opcjonalne przechwytywanie wszystkich ścieżek
[[...slug]] dopasowuje również segment główny — jest przydatne w przypadku opcjonalnych prefiksów ścieżki.
// 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
Eksportuj generateStaticParams(), aby wstępnie renderować dynamiczne trasy podczas budowania i wygenerować statyczny HTML dla każdej kombinacji parametrów.
export async function generateStaticParams() {
const posts = await getPosts();
return posts.map(p => ({ slug: p.slug }));
}
// → builds /blog/hello-world, /blog/react-tips etc. staticallyGrupy tras — (folder)
Umieść nazwę folderu w nawiasach, aby utworzyć grupę tras. Porządkuje ona pliki bez dodawania segmentu do adresu 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 URLsGrupy tras ze współdzielonymi layoutami
Każda grupa tras może mieć własny plik layout.tsx, co pozwala nadać różne layouty poszczególnym sekcjom bez zagnieżdżania ich w adresie URL.
// app/(marketing)/layout.tsx — marketing shell
// app/(app)/layout.tsx — authenticated app shell
// Both groups share app/layout.tsx as the rootTrasy równoległe — @slot
Dodaj prefiks @ do nazwy folderu, aby utworzyć slot. Sloty renderują się jednocześnie w nadrzędnym layoucie — jest to przydatne w przypadku modali, podziału ekranu lub kart.
// 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>
);
}Trasy przechwytujące — (..)
Użyj notacji (..), aby przechwycić trasę i wyrenderować ją w bieżącym widoku (np. otworzyć zdjęcie w modalu zamiast przechodzić do nowej strony).
// Soft navigation shows modal:
// app/@modal/(..)/photos/[id]/page.tsx
// Hard navigation shows full page:
// app/photos/[id]/page.tsxDynamiczne metadane trasy
Eksportuj asynchroniczną funkcję generateMetadata w dynamicznych trasach, aby ustawiać tagi SEO dla poszczególnych stron na podstawie parametrów trasy.
export async function generateMetadata({ params }: { params: { id: string } }) {
const product = await getProduct(params.id);
return { title: product.name, description: product.description };
}Szybkie sprawdzenie
Co powoduje ujęcie nazwy folderu w nawiasy w App Routerze Next.js?
Podsumowanie
[id] tworzy segmenty dynamiczne, [...slug] przechwytuje wszystkie podścieżki, a [[...slug]] sprawia, że są one opcjonalne. Grupy tras z użyciem (name) porządkują kod bez wpływu na adres URL i umożliwiają definiowanie layoutów dla poszczególnych grup. Używaj generateStaticParams do wstępnego renderowania podczas budowania.
Często zadawane pytania
Czy lekcja „Dynamiczne trasy i grupy tras” jest bezpłatna?
Tak — pełny tekst „Dynamiczne trasy i grupy tras” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Dynamiczne trasy i grupy tras”?
Tworzenie dynamicznych segmentów [slug], grup tras z (folder) oraz tras równoległych. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Dynamiczne trasy i grupy tras”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Konwencje plików App Router
- Komponenty serwerowe a klienckie w Next.js
- Dynamiczne trasy i grupy tras
- Metadata API i SEO w App Router