Menu

Route-Segment-Konfiguration

Die auf dieser Seite beschriebenen Optionen sind deaktiviert, wenn das dynamicIO-Flag aktiviert ist und werden in Zukunft vollständig veraltet sein.

Die Route-Segment-Optionen ermöglichen es Ihnen, das Verhalten einer Seite, eines Layouts oder eines Route-Handlers zu konfigurieren, indem Sie die folgenden Variablen direkt exportieren:

OptionTypStandard
experimental_pprboolean
dynamic'auto' | 'force-dynamic' | 'error' | 'force-static''auto'
dynamicParamsbooleantrue
revalidatefalse | 0 | numberfalse
fetchCache'auto' | 'default-cache' | 'only-cache' | 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store''auto'
runtime'nodejs' | 'edge''nodejs'
preferredRegion'auto' | 'global' | 'home' | string | string[]'auto'
maxDurationnumberVom Bereitstellungsplattform festgelegt

Optionen

experimental_ppr

Aktivieren Sie Partial Prerendering (PPR) für ein Layout oder eine Seite.

layout.tsx
TypeScript
export const experimental_ppr = true
// true | false

dynamic

Ändern Sie das dynamische Verhalten eines Layouts oder einer Seite zu vollständig statisch oder vollständig dynamisch.

layout.tsx
TypeScript
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
layout.js
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'

Hinweis: Das neue Modell im app-Verzeichnis bevorzugt eine granulare Caching-Kontrolle auf Ebene der fetch-Anfrage gegenüber dem binären Alles-oder-Nichts-Modell von getServerSideProps und getStaticProps auf Seitenebene im pages-Verzeichnis. Die dynamic-Option ist eine Möglichkeit, zurück zum vorherigen Modell zu wechseln und bietet einen einfacheren Migrationspfad.

  • 'auto' (Standard): Die Standardoption, um so viel wie möglich zu cachen, ohne dass Komponenten am dynamischen Verhalten gehindert werden.

  • 'force-dynamic': Erzwingen Sie dynamisches Rendering, was dazu führt, dass Routen für jeden Benutzer zum Zeitpunkt der Anfrage gerendert werden. Diese Option ist äquivalent zu:

    • getServerSideProps() im pages-Verzeichnis.
    • Setzen der Option jeder fetch()-Anfrage in einem Layout oder einer Seite auf { cache: 'no-store', next: { revalidate: 0 } }.
    • Setzen der Segmentkonfiguration auf export const fetchCache = 'force-no-store'
  • 'error': Erzwingen Sie statisches Rendering und Caching der Daten eines Layouts oder einer Seite, indem ein Fehler ausgelöst wird, wenn Komponenten Dynamische APIs oder nicht zwischengespeicherte Daten verwenden. Diese Option ist äquivalent zu:

    • getStaticProps() im pages-Verzeichnis.
    • Setzen der Option jeder fetch()-Anfrage in einem Layout oder einer Seite auf { cache: 'force-cache' }.
    • Setzen der Segmentkonfiguration auf fetchCache = 'only-cache', dynamicParams = false.
    • dynamic = 'error' ändert den Standard von dynamicParams von true zu false. Sie können dynamisch gerenderte Seiten für dynamische Parameter, die nicht von generateStaticParams generiert wurden, wieder aktivieren, indem Sie manuell dynamicParams = true setzen.
  • 'force-static': Erzwingen Sie statisches Rendering und Caching der Daten eines Layouts oder einer Seite, indem cookies, headers() und useSearchParams() gezwungen werden, leere Werte zurückzugeben.

Hinweis:

  • Anweisungen zum Migrieren von getServerSideProps und getStaticProps zu dynamic: 'force-dynamic' und dynamic: 'error' finden Sie im Upgrade-Leitfaden.

dynamicParams

Steuern Sie, was passiert, wenn ein dynamisches Segment besucht wird, das nicht mit generateStaticParams generiert wurde.

layout.tsx
TypeScript
export const dynamicParams = true // true | false,
layout.js
export const dynamicParams = true // true | false,
  • true (Standard): Dynamische Segmente, die nicht in generateStaticParams enthalten sind, werden bei Bedarf generiert.
  • false: Dynamische Segmente, die nicht in generateStaticParams enthalten sind, geben einen 404-Fehler zurück.

Hinweis:

  • Diese Option ersetzt die fallback: true | false | blocking-Option von getStaticPaths im pages-Verzeichnis.
  • Um alle Pfade beim ersten Besuch statisch zu rendern, müssen Sie ein leeres Array in generateStaticParams zurückgeben oder export const dynamic = 'force-static' verwenden.
  • Wenn dynamicParams = true ist, verwendet das Segment Streaming-Server-Rendering.
  • Wenn dynamic = 'error' und dynamic = 'force-static' verwendet werden, ändert dies den Standard von dynamicParams zu false.

revalidate

Legen Sie die standardmäßige Revalidierungszeit für ein Layout oder eine Seite fest. Diese Option überschreibt nicht den revalidate-Wert einzelner fetch-Anfragen.

layout.tsx
TypeScript
export const revalidate = false
// false | 0 | number
layout.js
export const revalidate = false
// false | 0 | number
  • false (Standard): Die Standard-Heuristik zum Zwischenspeichern von beliebigen fetch-Anfragen, die ihre cache-Option auf 'force-cache' setzen oder vor Verwendung einer Dynamischen API entdeckt werden. Semantisch gleichwertig mit revalidate: Infinity, was effektiv bedeutet, dass die Ressource unbegrenzt zwischengespeichert werden soll. Es ist dennoch möglich, dass einzelne fetch-Anfragen cache: 'no-store' oder revalidate: 0 verwenden, um nicht zwischengespeichert zu werden und die Route dynamisch zu rendern. Oder revalidate auf eine positive Zahl unterhalb des Routen-Standards setzen, um die Revalidierungshäufigkeit einer Route zu erhöhen.
  • 0: Sicherstellen, dass ein Layout oder eine Seite immer dynamisch gerendert wird, auch wenn keine Dynamischen APIs oder nicht zwischengespeicherte Datenabrufe entdeckt werden. Diese Option ändert den Standard von fetch-Anfragen, die keine cache-Option setzen, auf 'no-store', lässt aber fetch-Anfragen, die sich für 'force-cache' entscheiden oder eine positive revalidate-Option verwenden, unverändert.
  • Zahl: (in Sekunden) Die Standard-Revalidierungshäufigkeit eines Layouts oder einer Seite auf n Sekunden festlegen.

Hinweis:

  • Der Revalidierungswert muss statisch analysierbar sein. Beispielsweise ist revalidate = 600 gültig, aber revalidate = 60 * 10 nicht.
  • Der Revalidierungswert ist nicht verfügbar bei Verwendung von runtime = 'edge'.
  • In der Entwicklung werden Seiten immer bei Bedarf gerendert und niemals zwischengespeichert. Dies ermöglicht es Ihnen, Änderungen sofort zu sehen, ohne auf das Ablaufen einer Revalidierungsperiode warten zu müssen.

Revalidierungshäufigkeit

  • Der niedrigste revalidate-Wert über jedes Layout und jede Seite einer einzelnen Route bestimmt die Revalidierungshäufigkeit der gesamten Route. Dies stellt sicher, dass untergeordnete Seiten genauso häufig revalidiert werden wie ihre übergeordneten Layouts.
  • Einzelne fetch-Anfragen können einen niedrigeren revalidate-Wert als den Standard-revalidate der Route setzen, um die Revalidierungshäufigkeit der gesamten Route zu erhöhen. Dies ermöglicht es Ihnen, sich dynamisch für eine häufigere Revalidierung bestimmter Routen basierend auf bestimmten Kriterien zu entscheiden.

fetchCache

Dies ist eine erweiterte Option, die nur verwendet werden sollte, wenn Sie das Standardverhalten speziell überschreiben müssen.

Standardmäßig wird Next.js alle fetch()-Anfragen zwischenspeichern, die vor der Verwendung von Dynamischen APIs erreichbar sind, und wird fetch-Anfragen, die nach der Verwendung von Dynamischen APIs entdeckt werden, nicht zwischenspeichern.

fetchCache ermöglicht es Ihnen, die Standard-cache-Option aller fetch-Anfragen in einem Layout oder einer Seite zu überschreiben.

layout.tsx
TypeScript
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
layout.js
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
  • 'auto' (Standard): Die Standardoption zum Zwischenspeichern von fetch-Anfragen vor Dynamischen APIs mit der von ihnen bereitgestellten cache-Option und Nicht-Zwischenspeichern von fetch-Anfragen nach Dynamischen APIs.
  • 'default-cache': Jede cache-Option für fetch zulassen, aber wenn keine Option angegeben wird, die cache-Option auf 'force-cache' setzen. Das bedeutet, dass auch fetch-Anfragen nach Dynamischen APIs als statisch betrachtet werden.
  • 'only-cache': Sicherstellen, dass sich alle fetch-Anfragen für das Zwischenspeichern entscheiden, indem der Standard auf cache: 'force-cache' gesetzt wird, wenn keine Option angegeben wird, und einen Fehler verursachen, wenn fetch-Anfragen cache: 'no-store' verwenden.
  • 'force-cache': Sicherstellen, dass sich alle fetch-Anfragen für das Zwischenspeichern entscheiden, indem die cache-Option aller fetch-Anfragen auf 'force-cache' gesetzt wird.
  • 'default-no-store': Jede cache-Option für fetch zulassen, aber wenn keine Option angegeben wird, die cache-Option auf 'no-store' setzen. Das bedeutet, dass auch fetch-Anfragen vor Dynamischen APIs als dynamisch betrachtet werden.
  • 'only-no-store': Sicherstellen, dass sich alle fetch-Anfragen gegen das Zwischenspeichern entscheiden, indem der Standard auf cache: 'no-store' gesetzt wird, wenn keine Option angegeben wird, und einen Fehler verursachen, wenn fetch-Anfragen cache: 'force-cache' verwenden.
  • 'force-no-store': Sicherstellen, dass sich alle fetch-Anfragen gegen das Zwischenspeichern entscheiden, indem die cache-Option aller fetch-Anfragen auf 'no-store' gesetzt wird. Dies erzwingt, dass alle fetch-Anfragen bei jeder Anfrage neu abgerufen werden, auch wenn sie eine 'force-cache'-Option bereitstellen.

Segmentübergreifendes Verhalten

  • Alle Optionen, die über jedes Layout und jede Seite einer einzelnen Route festgelegt werden, müssen miteinander kompatibel sein.
    • Wenn sowohl 'only-cache' als auch 'force-cache' angegeben werden, gewinnt 'force-cache'. Wenn sowohl 'only-no-store' als auch 'force-no-store' angegeben werden, gewinnt 'force-no-store'. Die Force-Option ändert das Verhalten über die Route, sodass ein einzelnes Segment mit 'force-*' Fehler verhindern würde, die durch 'only-*' verursacht werden.
    • Die Absicht der 'only-*'- und 'force-*'-Optionen ist es, zu garantieren, dass die gesamte Route entweder vollständig statisch oder vollständig dynamisch ist. Das bedeutet:
      • Eine Kombination von 'only-cache' und 'only-no-store' in einer einzelnen Route ist nicht erlaubt.
      • Eine Kombination von 'force-cache' und 'force-no-store' in einer einzelnen Route ist nicht erlaubt.
    • Ein übergeordnetes Element kann nicht 'default-no-store' angeben, wenn ein untergeordnetes Element 'auto' oder '*-cache' angibt, da dies dazu führen könnte, dass derselbe Fetch ein unterschiedliches Verhalten hat.
  • Es wird generell empfohlen, gemeinsam genutzte übergeordnete Layouts als 'auto' zu belassen und die Optionen anzupassen, wenn untergeordnete Segmente abweichen.

runtime

Wir empfehlen die Verwendung der Node.js-Laufzeit zum Rendern Ihrer Anwendung und der Edge-Laufzeit für Middleware (einzige unterstützte Option).

layout.tsx
TypeScript
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
layout.js
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
  • 'nodejs' (Standard)
  • 'edge'

Weitere Informationen über die verschiedenen Laufzeiten.

preferredRegion

layout.tsx
TypeScript
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
layout.js
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']

Unterstützung für preferredRegion und unterstützte Regionen hängen von Ihrer Bereitstellungsplattform ab.

Hinweis:

  • Wenn keine preferredRegion angegeben wird, erbt sie die Option des nächstgelegenen übergeordneten Layouts.
  • Das Root-Layout verwendet standardmäßig alle Regionen.

maxDuration

Standardmäßig begrenzt Next.js die Ausführung von serverseitiger Logik nicht (Rendern einer Seite oder Handhabung einer API). Bereitstellungsplattformen können maxDuration aus der Next.js-Build-Ausgabe verwenden, um spezifische Ausführungsgrenzen hinzuzufügen. Zum Beispiel auf Vercel.

Hinweis: Diese Einstellung erfordert Next.js 13.4.10 oder höher.

layout.tsx
TypeScript
export const maxDuration = 5
layout.js
export const maxDuration = 5

Hinweis:

  • Bei Verwendung von Server-Aktionen kann die maxDuration auf Seitenebene festgelegt werden, um das Standardzeitlimit aller auf der Seite verwendeten Server-Aktionen zu ändern.

generateStaticParams

Die generateStaticParams-Funktion kann in Kombination mit dynamischen Routensegmenten verwendet werden, um die Liste der Routensegment-Parameter zu definieren, die zur Bauzeit statisch generiert werden sollen, anstatt bei Bedarf zum Zeitpunkt der Anfrage.

Weitere Details finden Sie in der API-Referenz.

Versionsverlauf

Version
v15.0.0-RCexport const runtime = "experimental-edge" veraltet. Ein Codemod ist verfügbar.