generateStaticParams
Die Funktion generateStaticParams
kann in Kombination mit dynamischen Routensegmenten verwendet werden, um Routen statisch zur Build-Zeit zu generieren, anstatt bei Bedarf zur Laufzeit.
Wissenswert:
- Sie können die
dynamicParams
-Segmentkonfigurationsoption verwenden, um zu steuern, was passiert, wenn ein dynamisches Segment aufgerufen wird, das nicht mitgenerateStaticParams
generiert wurde.- Sie müssen entweder ein leeres Array von
generateStaticParams
zurückgeben oderexport const dynamic = 'force-static'
verwenden, um Pfade zur Laufzeit neu zu validieren (ISR).- Während
next dev
wirdgenerateStaticParams
aufgerufen, wenn Sie zu einer Route navigieren.- Während
next build
wirdgenerateStaticParams
ausgeführt, bevor die entsprechenden Layouts oder Seiten generiert werden.- Während der Neuvvalidierung (ISR) wird
generateStaticParams
nicht erneut aufgerufen.generateStaticParams
ersetzt diegetStaticPaths
-Funktion im Pages Router.
Parameter
options.params
(optional)
Wenn mehrere dynamische Segmente in einer Route generateStaticParams
verwenden, wird die untergeordnete generateStaticParams
-Funktion einmal für jeden Satz von params
ausgeführt, den das übergeordnete Element generiert.
Das params
-Objekt enthält die gefüllten params
aus der übergeordneten generateStaticParams
-Funktion, die verwendet werden können, um die params
in einem untergeordneten Segment zu generieren.
Rückgabewerte
generateStaticParams
sollte ein Array von Objekten zurückgeben, wobei jedes Objekt die gefüllten dynamischen Segmente einer einzelnen Route darstellt.
- Jede Eigenschaft im Objekt ist ein dynamisches Segment, das für die Route ausgefüllt werden soll.
- Der Eigenschaftsname ist der Name des Segments, und der Eigenschaftswert ist der Wert, mit dem das Segment gefüllt werden soll.
Beispiel-Route | Rückgabetyp von generateStaticParams |
---|---|
/product/[id] | { id: string }[] |
/products/[category]/[product] | { category: string, product: string }[] |
/products/[...slug] | { slug: string[] }[] |
Einzelnes dynamisches Segment
Mehrere dynamische Segmente
Catch-all dynamisches Segment
Beispiele
Statisches Rendering
Alle Pfade zur Build-Zeit
Um alle Pfade zur Build-Zeit statisch zu rendern, übergeben Sie die vollständige Liste der Pfade an generateStaticParams
:
Teilmenge der Pfade zur Build-Zeit
Um eine Teilmenge der Pfade zur Build-Zeit statisch zu rendern und den Rest beim ersten Aufruf zur Laufzeit, geben Sie eine Teilmenge der Pfade zurück:
Dann können Sie mit der dynamicParams
-Segmentkonfigurationsoption steuern, was passiert, wenn ein dynamisches Segment aufgerufen wird, das nicht mit generateStaticParams
generiert wurde.
Alle Pfade zur Laufzeit
Um alle Pfade beim ersten Aufruf statisch zu rendern, geben Sie ein leeres Array zurück (keine Pfade werden zur Build-Zeit gerendert) oder verwenden Sie export const dynamic = 'force-static'
:
Wissenswert: Sie müssen immer ein Array von
generateStaticParams
zurückgeben, auch wenn es leer ist. Andernfalls wird die Route dynamisch gerendert.
Rendering für nicht spezifizierte Pfade deaktivieren
Um zu verhindern, dass nicht spezifizierte Pfade zur Laufzeit statisch gerendert werden, fügen Sie die Option export const dynamicParams = false
in einem Routensegment hinzu. Wenn diese Konfigurationsoption verwendet wird, werden nur die von generateStaticParams
bereitgestellten Pfade bedient, und nicht spezifizierte Routen führen zu einem 404-Fehler oder werden abgeglichen (im Fall von Catch-all-Routen).
Mehrere dynamische Segmente in einer Route
Sie können Parameter für dynamische Segmente oberhalb des aktuellen Layouts oder der aktuellen Seite generieren, aber nicht unterhalb. Zum Beispiel für die Route app/products/[category]/[product]
:
app/products/[category]/[product]/page.js
kann Parameter für sowohl[category]
als auch[product]
generieren.app/products/[category]/layout.js
kann nur Parameter für[category]
generieren.
Es gibt zwei Ansätze, um Parameter für eine Route mit mehreren dynamischen Segmenten zu generieren:
Parameter von unten nach oben generieren
Generieren Sie mehrere dynamische Segmente aus dem untergeordneten Routensegment.
Parameter von oben nach unten generieren
Generieren Sie zuerst die übergeordneten Segmente und verwenden Sie das Ergebnis, um die untergeordneten Segmente zu generieren.
Die generateStaticParams
-Funktion eines untergeordneten Routensegments wird einmal für jedes Segment ausgeführt, das eine übergeordnete generateStaticParams
-Funktion generiert.
Die untergeordnete generateStaticParams
-Funktion kann die params
der übergeordneten generateStaticParams
-Funktion verwenden, um ihre eigenen Segmente dynamisch zu generieren.
Wissenswert:
fetch
-Anfragen werden automatisch memoisiert für dieselben Daten über allegenerate
-präfixierten Funktionen, Layouts, Seiten und Serverkomponenten hinweg. Reactcache
kann verwendet werden, fallsfetch
nicht verfügbar ist.
Versionsverlauf
Version | Änderungen |
---|---|
v13.0.0 | generateStaticParams eingeführt. |