← Retour au cours

Routing et data fetching

⏱ 45 min · 🎬 Video · 🏆 25 XP
🎬
Vidéo en production
Notre équipe pédagogique tourne actuellement cette leçon avec un·e formateur·rice expert·e. Le contenu textuel ci-dessous est complet et utilisable dès maintenant.

🗺️ Le routing basé sur le filesystem

Dans Next.js, créer une route ne demande aucune configuration. Il suffit de créer un dossier dans app/ avec un fichier page à l'intérieur. La structure des dossiers correspond directement aux URLs.

Chemin du fichierURL générée
app/page/
app/about/page/about
app/blog/page/blog
app/dashboard/settings/page/dashboard/settings

🎯 Routes dynamiques avec crochets

Pour gérer des URLs avec un identifiant variable, Next.js utilise les crochets dans les noms de dossiers.

  • [id] — un seul segment dynamique. Exemple : app/blog/[slug]/page correspond à /blog/mon-article
  • [...slug] — catch-all, capture tous les segments restants. Utile pour /docs/getting-started/installation/cli
  • [[...slug]] — catch-all optionnel, fonctionne aussi sans aucun segment

💡 Le paramètre dynamique est récupéré dans la fonction params reçue en props par le composant page.

🏗️ Pré-générer des pages avec generateStaticParams

Pour transformer une route dynamique en pages statiques (SSG), Next.js fournit la fonction generateStaticParams. Elle est appelée au build et retourne la liste de toutes les valeurs à pré-générer.

Exemple concret : un blog avec 50 articles. La fonction retourne les 50 slugs, et Next.js génère 50 fichiers HTML statiques au build. Résultat : pages servies depuis le CDN, ultra rapides, parfaites pour le SEO.

🚀 Le système de cache à 4 niveaux

Le cache Next.js est sophistiqué. Il faut comprendre les 4 niveaux pour bien le maîtriser.

NiveauRôleDurée
Request MemoizationDédoublonne les fetch identiques pendant un même renderDurée de la requête
Data CacheCache les réponses fetch entre requêtes utilisateurPersistant, configurable
Full Route CacheCache le HTML rendu d'une routeAu build (SSG) ou ISR
Router CacheCache côté navigateur des navigations récentesSession utilisateur

⏳ Loading UI automatique

Crée un fichier loading à côté d'une page : Next.js l'affiche automatiquement pendant le chargement de la route. C'est de la magie : aucun useState, aucun spinner manuel à gérer.

Sous le capot, Next.js enveloppe la page dans un Suspense React et utilise loading comme fallback. Cela permet du streaming : les parties prêtes s'affichent immédiatement, les autres apparaissent au fur et à mesure.

🛡️ Error Boundaries avec error

De la même façon, un fichier error capture toutes les erreurs runtime de la route. L'utilisateur voit un message propre au lieu d'un écran blanc, et un bouton "Réessayer" relance le rendu.

🌊 Streaming et Suspense

Le streaming est l'une des innovations majeures de l'App Router. Au lieu d'attendre que toutes les données soient prêtes pour envoyer le HTML, Next.js envoie le HTML par morceaux dès qu'ils sont disponibles.

Concrètement : le header s'affiche en 100 ms, le contenu principal en 800 ms, les commentaires en 2 secondes. L'utilisateur voit la page se construire progressivement au lieu d'attendre 2 secondes face à un écran blanc.

🔍 Métadonnées SEO dynamiques

Chaque route peut exporter une fonction generateMetadata qui retourne les balises meta (title, description, og:image). Next.js insère ces métadonnées dans le head du HTML rendu côté serveur.

  • Title personnalisé par page
  • Description SEO unique
  • Open Graph pour partage Facebook, LinkedIn
  • Twitter Cards
  • Canonical URLs pour éviter le duplicate content

🆚 Server Component vs Client Component

CritèreServer ComponentClient Component
ExécutionSur le serveur uniquementDans le navigateur
Accès DBDirect, sans APIImpossible (passer par fetch)
useState / useEffectInterditAutorisé
Événements (onClick)InterditAutorisé
Bundle JS envoyéAucunInclus dans le bundle

✅ Mantra : Serveur par défaut, Client uniquement si nécessaire. Le Client Component se déclare avec une directive en première ligne du fichier.