Configuration des segments de route
Les options décrites sur cette page sont désactivées si le flag
dynamicIO
est activé, et seront finalement dépréciées à l'avenir.
Les options des segments de route vous permettent de configurer le comportement d'une Page, d'un Layout ou d'un Gestionnaire de route en exportant directement les variables suivantes :
Option | Type | Par défaut |
---|---|---|
experimental_ppr | boolean | |
dynamic | 'auto' | 'force-dynamic' | 'error' | 'force-static' | 'auto' |
dynamicParams | boolean | true |
revalidate | false | 0 | number | false |
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' |
maxDuration | number | Défini par la plateforme |
Options
experimental_ppr
Active le Pré-rendu partiel (PPR) pour un layout ou une page.
export const experimental_ppr = true
// true | false
export const experimental_ppr = true
// true | false
dynamic
Modifie le comportement dynamique d'un layout ou d'une page pour les rendre entièrement statiques ou entièrement dynamiques.
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
export const dynamic = 'auto'
// 'auto' | 'force-dynamic' | 'error' | 'force-static'
Bon à savoir : Le nouveau modèle dans le répertoire
app
favorise un contrôle granulaire du cache au niveau des requêtesfetch
plutôt que le modèle binaire tout ou rien degetServerSideProps
etgetStaticProps
au niveau des pages dans le répertoirepages
. L'optiondynamic
est un moyen de revenir à l'ancien modèle pour faciliter la migration.
'auto'
(par défaut) : L'option par défaut qui met en cache autant que possible sans empêcher les composants d'opter pour un comportement dynamique.'force-dynamic'
: Force le rendu dynamique, ce qui entraîne le rendu des routes pour chaque utilisateur au moment de la requête. Cette option équivaut à :- Définir l'option de chaque requête
fetch()
dans un layout ou une page à{ cache: 'no-store', next: { revalidate: 0 } }
. - Définir la configuration du segment à
export const fetchCache = 'force-no-store'
.
- Définir l'option de chaque requête
'error'
: Force le rendu statique et met en cache les données d'un layout ou d'une page en provoquant une erreur si des composants utilisent des APIs dynamiques ou des données non mises en cache. Cette option équivaut à :getStaticProps()
dans le répertoirepages
.- Définir l'option de chaque requête
fetch()
dans un layout ou une page à{ cache: 'force-cache' }
. - Définir la configuration du segment à
fetchCache = 'only-cache', dynamicParams = false
. dynamic = 'error'
change la valeur par défaut dedynamicParams
detrue
àfalse
. Vous pouvez revenir au rendu dynamique des pages pour les paramètres dynamiques non générés pargenerateStaticParams
en définissant manuellementdynamicParams = true
.
'force-static'
: Force le rendu statique et met en cache les données d'un layout ou d'une page en forçantcookies
,headers()
etuseSearchParams()
à retourner des valeurs vides. Il est possible d'utiliserrevalidate
,revalidatePath
ourevalidateTag
dans les pages ou layouts rendus avecforce-static
.
Bon à savoir :
- Des instructions sur comment migrer depuis
getServerSideProps
etgetStaticProps
versdynamic: 'force-dynamic'
etdynamic: 'error'
sont disponibles dans le guide de mise à niveau.
dynamicParams
Contrôle ce qui se passe lorsqu'un segment dynamique est visité et qu'il n'a pas été généré avec generateStaticParams.
export const dynamicParams = true // true | false,
export const dynamicParams = true // true | false,
true
(par défaut) : Les segments dynamiques non inclus dansgenerateStaticParams
sont générés à la demande.false
: Les segments dynamiques non inclus dansgenerateStaticParams
retourneront une erreur 404.
Bon à savoir :
- Cette option remplace l'option
fallback: true | false | blocking
degetStaticPaths
dans le répertoirepages
.- Pour rendre statiquement tous les chemins la première fois qu'ils sont visités, vous devez retourner un tableau vide dans
generateStaticParams
ou utiliserexport const dynamic = 'force-static'
.- Lorsque
dynamicParams = true
, le segment utilise le Rendu côté serveur en streaming (Streaming Server Rendering).
revalidate
Définit le temps de revalidation par défaut pour un layout ou une page. Cette option ne remplace pas la valeur revalidate
définie par les requêtes fetch
individuelles.
export const revalidate = false
// false | 0 | number
export const revalidate = false
// false | 0 | number
false
(par défaut) : L'heuristique par défaut pour mettre en cache toutes les requêtesfetch
qui définissent leur optioncache
à'force-cache'
ou qui sont découvertes avant l'utilisation d'une API dynamique. Sémantiquement équivalent àrevalidate: Infinity
, ce qui signifie que la ressource devrait être mise en cache indéfiniment. Il est toujours possible pour les requêtesfetch
individuelles d'utilisercache: 'no-store'
ourevalidate: 0
pour éviter d'être mises en cache et rendre la route dynamiquement. Ou définirrevalidate
à un nombre positif inférieur à la valeur par défaut de la route pour augmenter la fréquence de revalidation.0
: Garantit qu'un layout ou une page est toujours rendu dynamiquement, même si aucune API dynamique ou requête de données non mise en cache n'est découverte. Cette option change la valeur par défaut des requêtesfetch
qui ne définissent pas d'optioncache
à'no-store'
mais laisse les requêtesfetch
qui optent pour'force-cache'
ou utilisent unrevalidate
positif inchangées.number
: (en secondes) Définit la fréquence de revalidation par défaut d'un layout ou d'une page àn
secondes.
Bon à savoir :
- La valeur de revalidation doit être statiquement analysable. Par exemple,
revalidate = 600
est valide, maisrevalidate = 60 * 10
ne l'est pas.- La valeur de revalidation n'est pas disponible lorsque
runtime = 'edge'
.- En développement, les pages sont toujours rendues à la demande et ne sont jamais mises en cache. Cela vous permet de voir les changements immédiatement sans attendre qu'une période de revalidation passe.
Fréquence de revalidation
- La plus petite valeur
revalidate
parmi chaque layout et page d'une seule route déterminera la fréquence de revalidation de la route entière. Cela garantit que les pages enfants sont revalidées aussi fréquemment que leurs layouts parents. - Les requêtes
fetch
individuelles peuvent définir une valeurrevalidate
plus basse que la valeur par défaut de la route pour augmenter la fréquence de revalidation de la route entière. Cela vous permet d'opter dynamiquement pour une revalidation plus fréquente pour certaines routes en fonction de certains critères.
fetchCache
Il s'agit d'une option avancée qui ne devrait être utilisée que si vous avez spécifiquement besoin de remplacer le comportement par défaut.
Par défaut, Next.js mettra en cache toutes les requêtes fetch()
qui sont accessibles avant l'utilisation de toute API dynamique et ne mettra pas en cache les requêtes fetch
qui sont découvertes après l'utilisation d'APIs dynamiques.
fetchCache
vous permet de remplacer l'option cache
par défaut de toutes les requêtes fetch
dans un layout ou une page.
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
export const fetchCache = 'auto'
// 'auto' | 'default-cache' | 'only-cache'
// 'force-cache' | 'force-no-store' | 'default-no-store' | 'only-no-store'
'auto'
(par défaut) : L'option par défaut pour mettre en cache les requêtesfetch
avant les APIs dynamiques avec l'optioncache
qu'elles fournissent et ne pas mettre en cache les requêtesfetch
après les APIs dynamiques.'default-cache'
: Permet à n'importe quelle optioncache
d'être passée àfetch
, mais si aucune option n'est fournie, définit l'optioncache
à'force-cache'
. Cela signifie que même les requêtesfetch
après les APIs dynamiques sont considérées comme statiques.'only-cache'
: Garantit que toutes les requêtesfetch
optent pour la mise en cache en changeant la valeur par défaut àcache: 'force-cache'
si aucune option n'est fournie et en provoquant une erreur si une requêtefetch
utilisecache: 'no-store'
.'force-cache'
: Garantit que toutes les requêtesfetch
optent pour la mise en cache en définissant l'optioncache
de toutes les requêtesfetch
à'force-cache'
.'default-no-store'
: Permet à n'importe quelle optioncache
d'être passée àfetch
, mais si aucune option n'est fournie, définit l'optioncache
à'no-store'
. Cela signifie que même les requêtesfetch
avant les APIs dynamiques sont considérées comme dynamiques.'only-no-store'
: Garantit que toutes les requêtesfetch
optent pour ne pas être mises en cache en changeant la valeur par défaut àcache: 'no-store'
si aucune option n'est fournie et en provoquant une erreur si une requêtefetch
utilisecache: 'force-cache'
.'force-no-store'
: Garantit que toutes les requêtesfetch
optent pour ne pas être mises en cache en définissant l'optioncache
de toutes les requêtesfetch
à'no-store'
. Cela force toutes les requêtesfetch
à être récupérées à chaque requête, même si elles fournissent une option'force-cache'
.
Comportement entre segments de route
- Toutes les options définies parmi chaque layout et page d'une seule route doivent être compatibles entre elles.
- Si
'only-cache'
et'force-cache'
sont fournis, alors'force-cache'
l'emporte. Si'only-no-store'
et'force-no-store'
sont fournis, alors'force-no-store'
l'emporte. L'optionforce
change le comportement sur toute la route, donc un seul segment avec'force-*'
empêcherait toute erreur causée par'only-*'
. - L'intention des options
'only-*'
et'force-*'
est de garantir que toute la route est soit entièrement statique, soit entièrement dynamique. Cela signifie :- Une combinaison de
'only-cache'
et'only-no-store'
dans une seule route n'est pas autorisée. - Une combinaison de
'force-cache'
et'force-no-store'
dans une seule route n'est pas autorisée.
- Une combinaison de
- Un parent ne peut pas fournir
'default-no-store'
si un enfant fournit'auto'
ou'*-cache'
, car cela pourrait donner un comportement différent à la même requêtefetch
.
- Si
- Il est généralement recommandé de laisser les layouts parents partagés à
'auto'
et de personnaliser les options là où les segments enfants divergent.
runtime
Nous recommandons d'utiliser le runtime Node.js pour le rendu de votre application, et le runtime Edge pour le Middleware.
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
export const runtime = 'nodejs'
// 'nodejs' | 'edge'
'nodejs'
(par défaut)'edge'
preferredRegion
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
export const preferredRegion = 'auto'
// 'auto' | 'global' | 'home' | ['iad1', 'sfo1']
La prise en charge de preferredRegion
et des régions supportées dépend de votre plateforme de déploiement.
Bon à savoir :
- Si
preferredRegion
n'est pas spécifié, il héritera de l'option du layout parent le plus proche.- Le layout racine est défini par défaut sur toutes les régions (
all
).
maxDuration
Par défaut, Next.js ne limite pas l'exécution de la logique côté serveur (rendu d'une page ou gestion d'une API).
Les plateformes de déploiement peuvent utiliser maxDuration
depuis la sortie de build de Next.js pour ajouter des limites d'exécution spécifiques.
Note : Ce paramètre nécessite Next.js 13.4.10
ou supérieur.
export const maxDuration = 5
export const maxDuration = 5
Bon à savoir :
- Si vous utilisez Actions serveur, définissez
maxDuration
au niveau de la page pour modifier le délai d'expiration par défaut de toutes les Actions serveur utilisées sur la page.
generateStaticParams
La fonction generateStaticParams
peut être utilisée en combinaison avec des segments de route dynamiques pour définir la liste des paramètres de segment de route qui seront générés statiquement au moment du build plutôt qu'à la demande au moment de la requête.
Voir la référence API pour plus de détails.
Historique des versions
Version | |
---|---|
v15.0.0-RC | export const runtime = "experimental-edge" déprécié. Un codemod est disponible. |