getStaticPaths
Wenn Sie eine Funktion namens getStaticPaths
aus einer Seite exportieren, die Dynamische Routen verwendet, wird Next.js alle von getStaticPaths
angegebenen Pfade statisch vor-rendern.
Rückgabewerte von getStaticPaths
Die Funktion getStaticPaths
sollte ein Objekt mit den folgenden erforderlichen Eigenschaften zurückgeben:
paths
Der Schlüssel paths
bestimmt, welche Pfade vorgerendert werden. Angenommen, Sie haben eine Seite mit Dynamischen Routen namens pages/posts/[id].js
. Wenn Sie getStaticPaths
von dieser Seite exportieren und folgendes für paths
zurückgeben:
Dann wird Next.js während next build
die Seiten /posts/1
und /posts/2
statisch mit der Seitenkomponente in pages/posts/[id].js
generieren.
Die Werte für jedes params
-Objekt müssen den Parametern im Seitennamen entsprechen:
- Wenn der Seitenname
pages/posts/[postId]/[commentId]
lautet, sollteparams
postId
undcommentId
enthalten. - Wenn der Seitenname Catch-all-Routen wie
pages/[...slug]
verwendet, sollteparams
slug
enthalten (was ein Array ist). Wenn dieses Array['hello', 'world']
ist, generiert Next.js die Seite statisch unter/hello/world
. - Wenn die Seite eine optionale Catch-all-Route verwendet, können Sie
null
,[]
,undefined
oderfalse
verwenden, um die Root-Route zu rendern. Wenn Sie z.B.slug: false
fürpages/[[...slug]]
angeben, generiert Next.js die Seite/
statisch.
Die params
-Strings sind case-sensitive und sollten idealerweise normalisiert werden, um sicherzustellen, dass die Pfade korrekt generiert werden. Wenn z.B. WoRLD
für einen Parameter zurückgegeben wird, wird dies nur übereinstimmen, wenn WoRLD
der tatsächlich besuchte Pfad ist, nicht world
oder World
.
Unabhängig vom params
-Objekt kann ein locale
-Feld zurückgegeben werden, wenn i18n konfiguriert ist, was das Locale für den generierten Pfad konfiguriert.
fallback: false
Wenn fallback
false
ist, führt jeder Pfad, der nicht von getStaticPaths
zurückgegeben wird, zu einer 404-Seite.
Wenn next build
ausgeführt wird, prüft Next.js, ob getStaticPaths
fallback: false
zurückgegeben hat, und baut dann nur die von getStaticPaths
zurückgegebenen Pfade. Diese Option ist nützlich, wenn Sie eine kleine Anzahl von Pfaden erstellen müssen oder neue Seitendaten nicht häufig hinzugefügt werden. Wenn Sie feststellen, dass Sie mehr Pfade hinzufügen müssen und fallback: false
haben, müssen Sie next build
erneut ausführen, damit die neuen Pfade generiert werden können.
Das folgende Beispiel rendert einen Blogbeitrag pro Seite namens pages/posts/[id].js
vor. Die Liste der Blogbeiträge wird von einem CMS abgerufen und von getStaticPaths
zurückgegeben. Dann werden für jede Seite die Beitragsdaten mit getStaticProps
vom CMS abgerufen.
fallback: true
Wenn fallback
true
ist, ändert sich das Verhalten von getStaticProps
wie folgt:
- Die von
getStaticPaths
zurückgegebenen Pfade werden zur Build-Zeit vongetStaticProps
zuHTML
gerendert. - Pfade, die zur Build-Zeit nicht generiert wurden, führen nicht zu einer 404-Seite. Stattdessen liefert Next.js beim ersten Aufruf eines solchen Pfads eine "Fallback"-Version der Seite. Webcrawler wie Google erhalten keinen Fallback, sondern der Pfad verhält sich wie bei
fallback: 'blocking'
. - Wenn eine Seite mit
fallback: true
übernext/link
odernext/router
(clientseitig) aufgerufen wird, liefert Next.js keinen Fallback, sondern die Seite verhält sich wie beifallback: 'blocking'
. - Im Hintergrund generiert Next.js den angeforderten Pfad statisch als
HTML
undJSON
. Dies umfasst die Ausführung vongetStaticProps
. - Nach Abschluss erhält der Browser den
JSON
für den generierten Pfad. Dieser wird verwendet, um die Seite automatisch mit den erforderlichen Props zu rendern. Aus Nutzersicht wird die Seite von der Fallback-Seite zur vollständigen Seite gewechselt. - Gleichzeitig fügt Next.js diesen Pfad zur Liste der vorgerenderten Seiten hinzu. Nachfolgende Anfragen an denselben Pfad liefern die generierte Seite, wie andere zur Build-Zeit vorgerenderte Seiten.
Gut zu wissen:
fallback: true
wird nicht unterstützt, wennoutput: 'export'
verwendet wird.
Wann ist fallback: true
nützlich?
fallback: true
ist nützlich, wenn Ihre Anwendung eine sehr große Anzahl statischer Seiten hat, die von Daten abhängen (z.B. ein sehr großer E-Commerce-Shop). Wenn Sie alle Produktseiten vorrendern möchten, würden die Builds sehr lange dauern.
Stattdessen können Sie eine kleine Teilmenge der Seiten statisch generieren und fallback: true
für den Rest verwenden. Wenn jemand eine noch nicht generierte Seite anfordert, sieht der Nutzer die Seite mit einem Ladeindikator oder einer Skelettkomponente.
Kurz darauf schließt getStaticProps
ab und die Seite wird mit den angeforderten Daten gerendert. Ab diesem Zeitpunkt erhält jeder, der dieselbe Seite anfordert, die statisch vorgerenderte Seite.
Dies stellt sicher, dass Nutzer immer eine schnelle Erfahrung haben, während schnelle Builds und die Vorteile der statischen Generierung erhalten bleiben.
fallback: true
aktualisiert nicht generierte Seiten. Dafür siehe Inkrementelle Statische Regeneration.
fallback: 'blocking'
Wenn fallback
'blocking'
ist, warten neue Pfade, die nicht von getStaticPaths
zurückgegeben werden, auf die Generierung des HTML
, ähnlich wie SSR (daher blocking), und werden dann für zukünftige Anfragen zwischengespeichert, sodass dies nur einmal pro Pfad geschieht.
getStaticProps
verhält sich wie folgt:
- Die von
getStaticPaths
zurückgegebenen Pfade werden zur Build-Zeit vongetStaticProps
zuHTML
gerendert. - Pfade, die zur Build-Zeit nicht generiert wurden, führen nicht zu einer 404-Seite. Stattdessen führt Next.js beim ersten Aufruf SSR aus und liefert das generierte
HTML
. - Nach Abschluss erhält der Browser das
HTML
für den generierten Pfad. Aus Nutzersicht wechselt es von "der Browser fordert die Seite an" zu "die vollständige Seite ist geladen". Es gibt keinen flüchtigen Lade-/Fallback-Zustand. - Gleichzeitig fügt Next.js diesen Pfad zur Liste der vorgerenderten Seiten hinzu. Nachfolgende Anfragen an denselben Pfad liefern die generierte Seite, wie andere zur Build-Zeit vorgerenderte Seiten.
fallback: 'blocking'
aktualisiert generierte Seiten standardmäßig nicht. Um generierte Seiten zu aktualisieren, verwenden Sie Inkrementelle Statische Regeneration in Verbindung mit fallback: 'blocking'
.
Gut zu wissen:
fallback: 'blocking'
wird nicht unterstützt, wennoutput: 'export'
verwendet wird.
Fallback-Seiten
In der "Fallback"-Version einer Seite:
- Die Props der Seite sind leer.
- Mit dem Router können Sie erkennen, ob der Fallback gerendert wird:
router.isFallback
isttrue
.
Das folgende Beispiel zeigt die Verwendung von isFallback
:
Versionsverlauf
Version | Änderungen |
---|---|
v13.4.0 | App Router ist nun stabil mit vereinfachtem Data Fetching, einschließlich generateStaticParams() |
v12.2.0 | On-Demand Inkrementelle Statische Regeneration ist stabil. |
v12.1.0 | On-Demand Inkrementelle Statische Regeneration hinzugefügt (beta). |
v9.5.0 | Stabile Inkrementelle Statische Regeneration |
v9.3.0 | getStaticPaths eingeführt. |