getStaticProps
Si vous exportez une fonction appelée getStaticProps
(Génération de site statique) depuis une page, Next.js pré-rendra cette page au moment du build en utilisant les props retournées par getStaticProps
.
Notez que quel que soit le type de rendu, toutes les
props
seront transmises au composant de page et peuvent être consultées côté client dans le HTML initial. Ceci permet à la page d'être hydratée correctement. Assurez-vous de ne pas transmettre d'informations sensibles qui ne devraient pas être disponibles côté client dans lesprops
.
La référence API de getStaticProps
couvre tous les paramètres et props pouvant être utilisés avec getStaticProps
.
Quand utiliser getStaticProps ?
Vous devriez utiliser getStaticProps
si :
- Les données nécessaires au rendu de la page sont disponibles au moment du build avant la requête d'un utilisateur
- Les données proviennent d'un CMS headless
- La page doit être pré-rendue (pour le SEO) et être très rapide —
getStaticProps
génère des fichiersHTML
etJSON
, qui peuvent tous deux être mis en cache par un CDN pour des performances optimales - Les données peuvent être mises en cache publiquement (non spécifiques à un utilisateur). Cette condition peut être contournée dans certaines situations spécifiques en utilisant un Middleware pour réécrire le chemin.
Quand getStaticProps s'exécute-t-il
getStaticProps
s'exécute toujours côté serveur et jamais côté client. Vous pouvez vérifier que le code écrit dans getStaticProps
est supprimé du bundle côté client avec cet outil.
getStaticProps
s'exécute toujours pendantnext build
getStaticProps
s'exécute en arrière-plan lors de l'utilisation defallback: true
getStaticProps
est appelé avant le rendu initial lors de l'utilisation defallback: blocking
getStaticProps
s'exécute en arrière-plan lors de l'utilisation derevalidate
getStaticProps
s'exécute à la demande en arrière-plan lors de l'utilisation derevalidate()
Lorsqu'il est combiné avec la Régénération Statique Incrémentielle, getStaticProps
s'exécutera en arrière-plan pendant que la page obsolète est revalidée, et la page fraîche servie au navigateur.
getStaticProps
n'a pas accès à la requête entrante (comme les paramètres de requête ou les en-têtes HTTP) car il génère du HTML statique. Si vous avez besoin d'accéder à la requête pour votre page, envisagez d'utiliser un Middleware en plus de getStaticProps
.
Utiliser getStaticProps pour récupérer des données depuis un CMS
L'exemple suivant montre comment récupérer une liste d'articles de blog depuis un CMS.
La référence API de getStaticProps
couvre tous les paramètres et props pouvant être utilisés avec getStaticProps
.
Écrire du code serveur directement
Comme getStaticProps
ne s'exécute que côté serveur, il ne s'exécutera jamais côté client. Il ne sera même pas inclus dans le bundle JS pour le navigateur, vous pouvez donc écrire des requêtes directes à la base de données sans qu'elles ne soient envoyées aux navigateurs.
Cela signifie qu'au lieu de récupérer une route API depuis getStaticProps
(qui elle-même récupère des données depuis une source externe), vous pouvez écrire le code serveur directement dans getStaticProps
.
Prenons l'exemple suivant. Une route API est utilisée pour récupérer des données depuis un CMS. Cette route API est ensuite appelée directement depuis getStaticProps
. Cela produit un appel supplémentaire, réduisant les performances. À la place, la logique pour récupérer les données depuis le CMS peut être partagée en utilisant un répertoire lib/
. Elle peut ensuite être partagée avec getStaticProps
.
Alternativement, si vous n'utilisez pas les routes API pour récupérer des données, alors l'API fetch()
peut être utilisée directement dans getStaticProps
pour récupérer des données.
Pour vérifier ce que Next.js élimine du bundle côté client, vous pouvez utiliser l'outil next-code-elimination.
Génération statique de HTML et JSON
Lorsqu'une page avec getStaticProps
est pré-rendue au moment du build, en plus du fichier HTML de la page, Next.js génère un fichier JSON contenant le résultat de l'exécution de getStaticProps
.
Ce fichier JSON sera utilisé dans le routage côté client via next/link
ou next/router
. Lorsque vous naviguez vers une page pré-rendue utilisant getStaticProps
, Next.js récupère ce fichier JSON (pré-calculé au moment du build) et l'utilise comme props pour le composant de page. Cela signifie que les transitions de page côté client n'appelleront pas getStaticProps
car seul le JSON exporté est utilisé.
Lors de l'utilisation de la Régénération Statique Incrémentielle, getStaticProps
s'exécutera en arrière-plan pour générer le JSON nécessaire à la navigation côté client. Vous pourrez voir cela sous la forme de multiples requêtes faites pour la même page, cependant, c'est intentionnel et n'a pas d'impact sur les performances pour l'utilisateur final.
Où puis-je utiliser getStaticProps
getStaticProps
ne peut être exporté que depuis une page. Vous ne pouvez pas l'exporter depuis des fichiers non-pages, _app
, _document
, ou _error
.
Une des raisons de cette restriction est que React a besoin d'avoir toutes les données requises avant que la page ne soit rendue.
De plus, vous devez exporter getStaticProps
comme une fonction autonome — cela ne fonctionnera pas si vous ajoutez getStaticProps
comme propriété du composant de page.
Bon à savoir : si vous avez créé une application personnalisée, assurez-vous de transmettre les
pageProps
au composant de page comme indiqué dans le document lié, sinon les props seront vides.
Exécution à chaque requête en développement
En développement (next dev
), getStaticProps
sera appelé à chaque requête.
Mode Prévisualisation
Vous pouvez temporairement contourner la génération statique et rendre la page au moment de la requête au lieu du moment du build en utilisant le Mode Prévisualisation. Par exemple, vous pourriez utiliser un CMS headless et vouloir prévisualiser des brouillons avant leur publication.
Récupération de données
Next.js vous permet de récupérer des données de plusieurs manières, avec le pré-rendu, le rendu côté serveur ou la génération de site statique, et la régénération statique incrémentielle. Apprenez à gérer les données de votre application dans Next.js.
getStaticPaths
Récupérez des données et générez des pages statiques avec `getStaticPaths`. En savoir plus sur cette API pour la récupération de données dans Next.js.