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.
avec React Router 7
Posez vos questions 24/7 à notre IA experte en React Router 7
Validez vos acquis avec des quiz personnalisés et un feedback instantané
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.
routes.ts à chaque nouvelle page.Le file-based routing est optionnel : tu peux conserver ta config manuelle si tu préfères.
1npm install remix-flat-routes \2@react-router/remix-routes-option-adapter
1npm install
app/routes.tsOn remplace le tableau statique par l’adaptateur remixRoutesOptionAdapter et flatRoutes :
1import { type RouteConfig } from '@react-router/dev/routes'2import { remixRoutesOptionAdapter } from3'@react-router/remix-routes-option-adapter'4import { flatRoutes } from 'remix-flat-routes'56// ^? Détecte automatiquement toutes les routes sous `app/routes`7export default remixRoutesOptionAdapter((defineRoutes) => {8return flatRoutes('routes', defineRoutes, {9ignoredRouteFiles: [10'.*', // tous les fichiers cachés11'**/*.css', // styles globales12'**/*.test.{js,jsx,ts,tsx}', // fichiers de test13'**/__*.*', // préfixe __14'**/*.server.*', // utilitaires serveur15'**/*.client.*', // utilitaires client16],17})18}) satisfies RouteConfig
Le paramètre
'routes'indique àflatRoutesle dossier à scanner.
1app/2└── routes/3├── users+/4│ ├── _usersLayout.tsx # layout pour /users/*5│ ├── index.tsx # /users6│ ├── $userSlug.tsx # /users/:userSlug7│ └── export+/8│ ├── json.tsx # /users/export/json9│ ├── csv.tsx # /users/export/csv10│ └── pdf.tsx # /users/export/pdf11└── home.tsx # /home
+ 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.*.server.* ou *.client.* sont ignorés.Le + dans le nom du dossier indique à flatRoutes qu’il s’agit d’un
dossier de routes (et pas d’un utilitaire colocalisé).
Le CLI de React Router permet de “révéler” la config courante :
1npm run routes
1└── root2├── home.tsx3└── users+4├── index.tsx5├── $userSlug.tsx6├── _usersLayout.tsx7└── export+8├── json.tsx9├── csv.tsx10└── pdf.tsx
app/routes suffit à comprendre ton routingroutes.tsTu peux toujours combiner file-based routing et routes manuelles ;
ignoredRouteFiles t’offre toute la flexibilité.
Si un fichier doit contenir “server” ou “client”, échappe-le avec des crochets :
my-route.[server].ts ou my-route.[client].tsx.
blog+ avec un _blogLayout.tsx, index.tsx et
$slug.tsx. Vérifie l’arborescence avec npm run routes..spec.tsx
en les incluant dans ignoredRouteFiles.Bonne exploration du file-based routing !
Quelle est la principale différence entre les composants client et serveur dans React ?
Quelle technique est recommandée pour éviter les rendus inutiles dans React ?
Quel hook permet de gérer les effets de bord dans un composant React ?
Comment implémenter la gestion des erreurs pour les requêtes API dans React ?
Quelle est la meilleure pratique pour déployer une application React en production ?