Détecter les routes automatiquement (file-based-routing)

Dans cette leçon, je te présente deux plugins : @react-router/fs-routes, et remix-flat-routes. Ces deux plugins permettent entre autre de détecter automatiquement les routes présentes dans le dossier `app/routes`, et éviter de les déclarer de manière explicite.

3 min read
Déverrouillez votre potentiel

avec React Router 7

Vous en avez marre de...

❌ perdre du temps à chercher des informations éparpillées
❌ ne pas avoir de retour sur votre progression
Assistant IA spécialisé

Posez vos questions 24/7 à notre IA experte en React Router 7

Quiz interactifs

Validez vos acquis avec des quiz personnalisés et un feedback instantané

9 modules
45 leçons
Accès à vie
299.00
-50%

Dans tes projets React Router 7, tu as peut-être déjà éprouvé la lourdeur de déclarer manuellement chaque route dans app/routes.ts. Et si on automatisait tout ça ? Grâce au plugin remix-flat-routes, tu peux tirer parti du file-based routing inspiré de Remix et Next.js : tes fichiers et dossiers dans app/routes/ deviennent la source unique de vérité pour tes routes.

Pourquoi utiliser le file-based routing ?

  • Gain de temps : plus besoin de mettre à jour routes.ts à chaque nouvelle page.
  • Moins d’erreurs : la correspondance fichier ↔ URL suit une convention simple.
  • Meilleure organisation : tes dossiers structurent directement ton URL, et vice versa.

Installation du plugin

install.sh
1
npm install remix-flat-routes \
2
@react-router/remix-routes-option-adapter
Terminal
1
npm install

Configuration de app/routes.ts

On remplace le tableau statique par l’adaptateur remixRoutesOptionAdapter et flatRoutes :

app/routes.ts
1
import { type RouteConfig } from '@react-router/dev/routes'
2
import { remixRoutesOptionAdapter } from
3
'@react-router/remix-routes-option-adapter'
4
import { flatRoutes } from 'remix-flat-routes'
5
6
// ^? Détecte automatiquement toutes les routes sous `app/routes`
7
export default remixRoutesOptionAdapter((defineRoutes) => {
8
return flatRoutes('routes', defineRoutes, {
9
ignoredRouteFiles: [
10
'.*', // tous les fichiers cachés
11
'**/*.css', // styles globales
12
'**/*.test.{js,jsx,ts,tsx}', // fichiers de test
13
'**/__*.*', // préfixe __
14
'**/*.server.*', // utilitaires serveur
15
'**/*.client.*', // utilitaires client
16
],
17
})
18
}) satisfies RouteConfig

Le paramètre 'routes' indique à flatRoutes le dossier à scanner.


Conventions de nommage

1
app/
2
└── routes/
3
├── users+/
4
│ ├── _usersLayout.tsx # layout pour /users/*
5
│ ├── index.tsx # /users
6
│ ├── $userSlug.tsx # /users/:userSlug
7
│ └── export+/
8
│ ├── json.tsx # /users/export/json
9
│ ├── csv.tsx # /users/export/csv
10
│ └── pdf.tsx # /users/export/pdf
11
└── home.tsx # /home
  • Le suffixe + dans users+ active le dossier comme segment /users.
  • _usersLayout.tsx (underscore en préfixe) crée un layout imbriqué.
  • index.tsx → route index du segment (équiv. index() en config).
  • $userSlug.tsx → segment dynamique :userSlug.
  • export+/export à l’intérieur de /users.
  • Les fichiers *.server.* ou *.client.* sont ignorés.

Visualiser l’arborescence

Le CLI de React Router permet de “révéler” la config courante :

1
npm run routes
Terminal
1
└── root
2
├── home.tsx
3
└── users+
4
├── index.tsx
5
├── $userSlug.tsx
6
├── _usersLayout.tsx
7
└── export+
8
├── json.tsx
9
├── csv.tsx
10
└── pdf.tsx

Avantages et bon usage

  • Organisation : chaque dossier : fragment d’URL
  • Clarté : un coup d’œil dans app/routes suffit à comprendre ton routing
  • Moins de boilerplate : plus de routes hard-codées dans routes.ts

Exercices rapides

  1. Crée un dossier blog+ avec un _blogLayout.tsx, index.tsx et $slug.tsx. Vérifie l’arborescence avec npm run routes.
  2. Ajoute une convention pour ignorer tous les fichiers .spec.tsx en les incluant dans ignoredRouteFiles.
  3. Renomme un ancien dossier de routes manuelles en format file-based et teste la navigation sur toutes les routes imbriquées.

Bonne exploration du file-based routing !

Premium
Quiz interactif
Testez vos connaissances et validez votre compréhension du module avec notre quiz interactif.
1

Comprendre les concepts fondamentaux

Quelle est la principale différence entre les composants client et serveur dans React ?

Les composants client s'exécutent uniquement dans le navigateur
Les composants serveur peuvent utiliser useState
Les composants client sont plus rapides
Il n'y a aucune différence significative
2

Optimisation des performances

Quelle technique est recommandée pour éviter les rendus inutiles dans React ?

Utiliser React.memo pour les composants fonctionnels
Ajouter plus d'états locaux
Éviter d'utiliser les props
Toujours utiliser les class components
3

Architecture des données

Quel hook permet de gérer les effets de bord dans un composant React ?

useEffect
useState
useMemo
useContext
4

Gestion des erreurs

Comment implémenter la gestion des erreurs pour les requêtes API dans React ?

Utiliser try/catch avec async/await
Ignorer les erreurs
Toujours afficher un message d'erreur
Rediriger l'utilisateur
5

Déploiement et CI/CD

Quelle est la meilleure pratique pour déployer une application React en production ?

Utiliser un service CI/CD comme GitHub Actions
Copier les fichiers manuellement via FTP
Envoyer le code source complet
Ne jamais mettre à jour l'application

Débloquez ce quiz et tous les autres contenus premium en achetant ce cours