Principes fondamentaux du routage

Le squelette de toute application est son système de routage. Cette page vous présentera les concepts fondamentaux du routage web et comment gérer le routage dans Next.js.

Terminologie

Vous rencontrerez ces termes fréquemment dans la documentation. Voici un rapide glossaire :

Terminologie pour l'arborescence des composants
  • Arbre : Convention pour visualiser une structure hiérarchique. Par exemple, un arbre de composants avec des composants parents et enfants, une structure de dossiers, etc.
  • Sous-arbre : Partie d'un arbre, commençant à une nouvelle racine (premier nœud) et se terminant aux feuilles (dernier nœud).
  • Racine : Le premier nœud d'un arbre ou sous-arbre, comme une mise en page racine.
  • Feuille : Nœuds d'un sous-arbre sans enfants, comme le dernier segment d'un chemin d'URL.
Terminologie pour l'anatomie d'une URL
  • Segment d'URL : Partie du chemin d'URL délimitée par des barres obliques.
  • Chemin d'URL : Partie de l'URL qui suit le domaine (composée de segments).

Le routeur app

Dans la version 13, Next.js a introduit un nouveau routeur App basé sur les composants serveur React, qui prend en charge les mises en page partagées, le routage imbriqué, les états de chargement, la gestion des erreurs et plus encore.

Le routeur App fonctionne dans un nouveau répertoire nommé app. Le répertoire app coexiste avec le répertoire pages pour permettre une adoption progressive. Cela vous permet d'opter pour le nouveau comportement sur certaines routes de votre application tout en conservant d'autres routes dans le répertoire pages pour le comportement précédent. Si votre application utilise le répertoire pages, consultez également la documentation du routeur Pages.

Bon à savoir : Le routeur App a la priorité sur le routeur Pages. Les routes entre les répertoires ne doivent pas résoudre vers le même chemin d'URL et provoqueront une erreur lors de la compilation pour éviter un conflit.

Répertoire App de Next.js

Par défaut, les composants dans app sont des composants serveur React. Il s'agit d'une optimisation de performance qui permet de les adopter facilement, et vous pouvez également utiliser des composants client.

Recommandation : Consultez la page Serveur si vous débutez avec les composants serveur.

Rôles des dossiers et fichiers

Next.js utilise un routeur basé sur le système de fichiers où :

  • Les dossiers servent à définir les routes. Une route est un chemin unique de dossiers imbriqués, suivant la hiérarchie du système de fichiers depuis le dossier racine jusqu'à un dossier feuille final qui inclut un fichier page.js. Voir Définition des routes.
  • Les fichiers servent à créer l'interface utilisateur affichée pour un segment de route. Voir fichiers spéciaux.

Segments de route

Chaque dossier dans une route représente un segment de route. Chaque segment de route est mappé à un segment correspondant dans un chemin d'URL.

Comment les segments de route correspondent aux segments d'URL

Routes imbriquées

Pour créer une route imbriquée, vous pouvez imbriquer des dossiers les uns dans les autres. Par exemple, vous pouvez ajouter une nouvelle route /dashboard/settings en imbriquant deux nouveaux dossiers dans le répertoire app.

La route /dashboard/settings est composée de trois segments :

  • / (Segment racine)
  • dashboard (Segment)
  • settings (Segment feuille)

Conventions de fichiers

Next.js fournit un ensemble de fichiers spéciaux pour créer des interfaces utilisateur avec des comportements spécifiques dans les routes imbriquées :

layoutInterface partagée pour un segment et ses enfants
pageInterface unique d'une route et rend les routes accessibles publiquement
loadingInterface de chargement pour un segment et ses enfants
not-foundInterface "non trouvé" pour un segment et ses enfants
errorInterface d'erreur pour un segment et ses enfants
global-errorInterface d'erreur globale
routePoint de terminaison API côté serveur
templateMise en page spécialisée re-rendue
defaultInterface de secours pour les routes parallèles

Bon à savoir : Les extensions de fichier .js, .jsx ou .tsx peuvent être utilisées pour les fichiers spéciaux.

Hiérarchie des composants

Les composants React définis dans les fichiers spéciaux d'un segment de route sont rendus dans une hiérarchie spécifique :

  • layout.js
  • template.js
  • error.js (limite d'erreur React)
  • loading.js (limite de suspense React)
  • not-found.js (limite d'erreur React)
  • page.js ou layout.js imbriqué
Hiérarchie des composants pour les conventions de fichiers

Dans une route imbriquée, les composants d'un segment seront imbriqués à l'intérieur des composants de son segment parent.

Hiérarchie des composants pour les conventions de fichiers imbriquées

Colocalisation

En plus des fichiers spéciaux, vous avez la possibilité de colocaliser vos propres fichiers (par exemple, composants, styles, tests, etc.) dans les dossiers du répertoire app.

En effet, bien que les dossiers définissent les routes, seuls les contenus renvoyés par page.js ou route.js sont accessibles publiquement.

Exemple de structure de dossiers avec fichiers colocalisés

En savoir plus sur l'organisation de projet et la colocalisation.

Modèles de routage avancés

Le routeur App fournit également un ensemble de conventions pour vous aider à implémenter des modèles de routage plus avancés. Ceux-ci incluent :

  • Routes parallèles : Permettent d'afficher simultanément deux pages ou plus dans la même vue, pouvant être naviguées indépendamment. Utiles pour les vues divisées avec leur propre sous-navigation, par exemple les tableaux de bord.
  • Routes d'interception : Permettent d'intercepter une route et de l'afficher dans le contexte d'une autre route. Utiles lorsque le contexte de la page actuelle est important, par exemple voir toutes les tâches tout en en éditant une ou agrandir une photo dans un flux.

Ces modèles vous permettent de créer des interfaces utilisateur plus riches et complexes, démocratisant des fonctionnalités historiquement complexes à implémenter pour les petites équipes et les développeurs individuels.

Prochaines étapes

Maintenant que vous comprenez les principes fondamentaux du routage dans Next.js, suivez les liens ci-dessous pour créer vos premières routes :

Définition des routes

Apprenez à créer votre première route dans Next.js.

Pages et Layouts

Créez votre première page et mise en page partagée avec le routeur App.

Liaison et navigation

Apprenez comment fonctionne la navigation dans Next.js, et comment utiliser le composant Link et le hook `useRouter`.

Groupes de routes

Les groupes de routes permettent de partitionner votre application Next.js en différentes sections.

Routes dynamiques

Les routes dynamiques permettent de générer des segments de route à partir de données dynamiques de manière programmatique.

Interface de chargement et streaming

Basé sur Suspense, l'interface de chargement permet de créer un contenu de repli pour des segments de route spécifiques et de diffuser automatiquement le contenu dès qu'il est prêt.

Gestion des erreurs

Gérez les erreurs d'exécution en englobant automatiquement les segments de route et leurs enfants dans une limite d'erreur (Error Boundary) React.

Routes parallèles

Affichez simultanément une ou plusieurs pages dans la même vue, avec une navigation indépendante. Un modèle pour les applications hautement dynamiques.

Routes d'interception

Utilisez les routes d'interception pour charger une nouvelle route dans la mise en page actuelle tout en masquant l'URL du navigateur, utile pour des motifs de routage avancés comme les modales.

Gestionnaires de route (Route Handlers)

Créez des gestionnaires de requêtes personnalisés pour une route donnée en utilisant les API Request et Response du Web.

Middleware

Apprenez à utiliser le Middleware pour exécuter du code avant qu'une requête ne soit complétée.

Organisation de projet

Apprenez à organiser votre projet Next.js et à colocaliser vos fichiers.

Internationalisation

Ajoutez la prise en charge de plusieurs langues avec un routage internationalisé et un contenu localisé.