Dynamische Routen
Wenn Sie die genauen Segmentnamen im Voraus nicht kennen und Routen aus dynamischen Daten erstellen möchten, können Sie dynamische Segmente verwenden, die zur Laufzeit der Anfrage ausgefüllt oder vorgerendert werden.
Konvention
Ein dynamisches Segment kann erstellt werden, indem ein Datei- oder Ordnername in eckige Klammern gesetzt wird: [segmentName]
. Zum Beispiel [id]
oder [slug]
.
Dynamische Segmente können über useRouter
abgerufen werden.
Beispiel
Ein Blog könnte beispielsweise die folgende Route enthalten pages/blog/[slug].js
, wobei [slug]
das dynamische Segment für Blogbeiträge ist.
Route | Beispiel-URL | params |
---|---|---|
pages/blog/[slug].js | /blog/a | { slug: 'a' } |
pages/blog/[slug].js | /blog/b | { slug: 'b' } |
pages/blog/[slug].js | /blog/c | { slug: 'c' } |
Catch-all-Segmente
Dynamische Segmente können erweitert werden, um alle nachfolgenden Segmente zu erfassen, indem ein Auslassungspunkte innerhalb der Klammern hinzugefügt wird [...segmentName]
.
Zum Beispiel wird pages/shop/[...slug].js
mit /shop/clothes
übereinstimmen, aber auch mit /shop/clothes/tops
, /shop/clothes/tops/t-shirts
usw.
Route | Beispiel-URL | params |
---|---|---|
pages/shop/[...slug].js | /shop/a | { slug: ['a'] } |
pages/shop/[...slug].js | /shop/a/b | { slug: ['a', 'b'] } |
pages/shop/[...slug].js | /shop/a/b/c | { slug: ['a', 'b', 'c'] } |
Optionale Catch-all-Segmente
Catch-all-Segmente können optional gemacht werden, indem der Parameter in doppelte eckige Klammern gesetzt wird: [[...segmentName]]
.
Zum Beispiel wird pages/shop/[[...slug]].js
auch mit /shop
übereinstimmen, zusätzlich zu /shop/clothes
, /shop/clothes/tops
, /shop/clothes/tops/t-shirts
.
Der Unterschied zwischen Catch-all und optionalen Catch-all Segmenten besteht darin, dass bei optionalen Segmenten auch die Route ohne den Parameter übereinstimmt (/shop
im obigen Beispiel).
Route | Beispiel-URL | params |
---|---|---|
pages/shop/[[...slug]].js | /shop | { slug: undefined } |
pages/shop/[[...slug]].js | /shop/a | { slug: ['a'] } |
pages/shop/[[...slug]].js | /shop/a/b | { slug: ['a', 'b'] } |
pages/shop/[[...slug]].js | /shop/a/b/c | { slug: ['a', 'b', 'c'] } |