Skip to Content
🎉 Utilisez JS efficacement →
Next.jsRoutage 🛣️Routage

🚀 Routing basé sur le système de fichiers dans Next.js (app/ vs pages/)

Next.js propose deux systèmes de routing basés sur l’arborescence des fichiers :

  • Le Pages Router (pages/) (jusqu’à Next.js 12 et optionnel dans Next.js 13+).
  • Le App Router (app/) (introduit dans Next.js 13 et par défaut à partir de Next.js 14).

Voyons les différences et avantages de ces deux approches.


1️⃣ Routing dans pages/ (Pages Router - Ancienne méthode)

📌 Dans pages/, chaque fichier .js ou .tsx dans pages/ définit une route unique.
📌 Le fichier pages/_app.js sert de layout global pour toutes les pages.

** Exemple d’architecture pages/ :**

pages/ ├── index.tsx → Route "/" ├── about.tsx → Route "/about" ├── contact.tsx → Route "/contact" ├── blog/ │ ├── index.tsx → Route "/blog" │ ├── [id].tsx → Route "/blog/:id" (dynamic routing) ├── api/ │ ├── hello.ts → API route "/api/hello" ├── _app.tsx → Layout global ├── _document.tsx → Personnalisation du document HTML

✅ Avantages de pages/ :

Facile à comprendre et rapide à mettre en place.
Compatible avec Next.js 12 et inférieur.
Fonctionne bien avec les API Routes (pages/api/).

❌ Inconvénients de pages/ :

Layouts difficiles à gérer → il faut dupliquer le code ou utiliser _app.js.
Moins optimisé → toutes les pages sont des Client Components par défaut.
Gestion du rendu moins performante → nécessite des API Routes pour récupérer des données serveur.


2️⃣ Routing dans app/ (App Router - Nouvelle méthode)

📌 Chaque dossier dans app/ devient une route (au lieu d’un fichier .tsx).
📌 Chaque page est définie par un fichier page.tsx.
📌 Les layouts (layout.tsx) permettent de structurer l’interface sans recharger les composants communs.

** Exemple d’architecture app/ :**

app/ ├── layout.tsx → Layout global ├── page.tsx → Route "/" ├── about/ │ ├── page.tsx → Route "/about" │ ├── layout.tsx → Layout spécifique à "/about" ├── blog/ │ ├── page.tsx → Route "/blog" │ ├── [id]/ → Route dynamique "/blog/:id" │ │ ├── page.tsx → Contenu d’un article ├── api/ → (Déprécié, remplacé par Server Actions) ├── loading.tsx → Animation de chargement globale ├── error.tsx → Gestion des erreurs globale

✅ Avantages de app/ :

Layouts imbriqués (layout.tsx) → évite de recharger des parties inutiles de l’UI.
Server Components par défaut → réduit le JavaScript envoyé au client.
Gestion native des métadonnées (generateMetadata()) → plus besoin de <Head>.
Server Actions → permet de gérer des actions côté serveur sans API Routes.

❌ Inconvénients de app/ :

Changement de paradigme → nécessite d’apprendre de nouvelles conventions.
Moins de compatibilité avec certains anciens outils (ex: API Routes).


3️⃣ Comparaison entre pages/ et app/

FonctionnalitéPages Router (pages/)App Router (app/)
Définition des routesBasé sur les fichiersBasé sur les dossiers
Layouts_app.tsx pour toutlayout.tsx par dossier
Rendu par défautClient ComponentsServer Components
Gestion des métadonnées<Head> dans chaque pagegenerateMetadata() natif
API Routespages/api/Remplacé par Server Actions
Streaming et SuspenseComplexe à gérerIntégré nativement
PerformanceMoins optimiséMoins de JS côté client

4️⃣ Exemple pratique : Route dynamique avec pages/ vs app/

📌 Dans pages/ (Ancienne méthode)

pages/blog/[id].tsx
import { useRouter } from "next/router"; export default function BlogPost() { const router = useRouter(); const { id } = router.query; return <h1>Article {id}</h1>; }

💡 Utilisation de useRouter() pour récupérer l’ID de l’URL.


📌 Dans app/ (Nouvelle méthode)

app/blog/[id]/page.tsx
export default function BlogPost({ params }: { params: { id: string } }) { return <h1>Article {params.id}</h1>; }

💡 Les paramètres (params.id) sont passés directement dans la fonction, sans useRouter() !


🎯 Conclusion : Quelle approche choisir ?

Si vous travaillez sur…Recommandation
Un projet Next.js 12 ou antérieurUtilisez pages/
Un projet existant en pages/Continuez en pages/ sauf si besoin d’optimisation
Un nouveau projet en Next.js 13+Utilisez app/ pour profiter des nouvelles fonctionnalités

💡 Le App Router (app/) est la meilleure option pour un projet moderne, grâce à ses performances améliorées, Server Components et layouts flexibles. 🚀

mis à jour le