Dynamiske routes og routegrupper
Opret dynamiske [slug]-segmenter, routegrupper med (folder) og parallelle routes.
Dynamiske routes og routegrupper er en gratis React Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.
Dynamiske segmenter
Sæt et mappenavn i firkantede parenteser for at oprette et dynamisk segment. Værdien er tilgængelig i params, som gives videre til siden.
// app/products/[id]/page.tsx
export default function ProductPage({ params }: { params: { id: string } }) {
return <h1>Product {params.id}</h1>;
}
// → /products/123 → params.id = '123'Typede parametre
Parametre er altid strenge i URL'en. Konvertér dem eksplicit for numeriske ID'er.
export default async function PostPage({ params }: { params: { slug: string } }) {
const post = await getPostBySlug(params.slug);
if (!post) notFound();
return <article>{post.content}</article>;
}Catch-all-segmenter
Brug [...slug] til at matche et vilkårligt antal stisegmenter. Værdien er et array af strenge.
// 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} />;
}Valgfrit catch-all-segment
[[...slug]] matcher også rodsegmentet — nyttigt til valgfri præfikser i stier.
// 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
Eksportér generateStaticParams() for at forhåndsgengive dynamiske ruter på buildtid og producere statisk HTML for hver kombination af parametre.
export async function generateStaticParams() {
const posts = await getPosts();
return posts.map(p => ({ slug: p.slug }));
}
// → builds /blog/hello-world, /blog/react-tips etc. staticallyRutegrupper — (folder)
Sæt et mappenavn i parentes for at oprette en rutegruppe. Den organiserer filer uden at tilføje et URL-segment.
// 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 URLsRutegrupper med delte layouts
Hver rutegruppe kan have sit eget layout.tsx, så forskellige områder kan få forskellige layouts uden indlejring i URL'en.
// app/(marketing)/layout.tsx — marketing shell
// app/(app)/layout.tsx — authenticated app shell
// Both groups share app/layout.tsx as the rootParallelle ruter — @slot
Sæt @ foran en mappe for at oprette en slot. Slots gengives samtidigt i det overordnede layout — nyttigt til modaler, delt skærm eller faner.
// 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>
);
}Interceptende ruter — (..)
Brug notationen (..) til at opfange en rute og gengive den direkte i den aktuelle side (åbn for eksempel et foto i en modal i stedet for at navigere til en ny side).
// Soft navigation shows modal:
// app/@modal/(..)/photos/[id]/page.tsx
// Hard navigation shows full page:
// app/photos/[id]/page.tsxDynamiske routemetadata
Eksportér en asynkron generateMetadata-funktion i dynamiske ruter for at angive SEO-tags pr. side baseret på ruteparametre.
export async function generateMetadata({ params }: { params: { id: string } }) {
const product = await getProduct(params.id);
return { title: product.name, description: product.description };
}Hurtig kontrol
Hvad gør det i Next.js App Router, når du sætter et mappenavn i parentes?
Opsummering
[id] opretter dynamiske segmenter, [...slug] opfanger alle underliggende stier, og [[...slug]] gør dem valgfri. Rutegrupper med (name) organiserer kode uden at påvirke URL'en og muliggør layouts pr. gruppe. Brug generateStaticParams til forhåndsgengivelse på buildtid.
Lær React med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 88
- Lektioner
- 324
Ofte stillede spørgsmål
Er lektionen “Dynamiske routes og routegrupper” gratis?
Ja — hele teksten til “Dynamiske routes og routegrupper” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Dynamiske routes og routegrupper”?
Opret dynamiske [slug]-segmenter, routegrupper med (folder) og parallelle routes. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på React Academy?
Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Dynamiske routes og routegrupper”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne React Academy-lektion?
Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Filkonventioner i App Router
- Server- og klientkomponenter i Next.js
- Dynamiske routes og routegrupper
- Metadata-API og SEO i App Router