Progression
0 %
0/32 étapes terminées
Intermédiaire · 8 min de lecture
Expo Router
La navigation qui se lit comme une arborescence
1Définition
Expo Router est un système de navigation basé sur les fichiers, construit au-dessus de React Navigation. Chaque fichier du dossier app/ est une route, et chaque route a une URL.
2Principes fondamentaux
01
Fichiers et URL
index.tsx est la racine d'un dossier, [param].tsx une route dynamique, [...reste].tsx attrape tous les segments restants, +not-found.tsx gère les routes inconnues.
02
Les layouts imbriqués
Chaque _layout.tsx enveloppe les routes de son dossier : une Stack racine peut contenir un groupe (tabs), qui contient à son tour ses écrans.
03
Navigation typée et liens profonds
Chaque écran étant une URL, les liens profonds et le web fonctionnent naturellement. Les routes typées peuvent vérifier tes href à la compilation.
3Exemples pratiques
Une app avec onglets et fiche détail
1app/2├── _layout.tsx // <Stack />3├── (tabs)/4│ ├── _layout.tsx // <Tabs />5│ ├── index.tsx // Accueil /6│ └── cours.tsx // Mes cours /cours7├── lecon/8│ └── [id].tsx // Leçon /lecon/rn-flexbox9└── +not-found.tsx // Page inconnueLa fiche leçon est hors du groupe d'onglets : elle s'ouvre par-dessus, dans la Stack racine, avec un bouton retour.
Passer et lire des paramètres
1// Depuis la liste2router.push({ pathname: '/lecon/[id]', params: { id: 'rn-flexbox' } });3 4// Dans app/lecon/[id].tsx5const { id } = useLocalSearchParams<{ id: string }>();La forme objet de router.push évite de construire les URL à la main.
4Erreurs courantes
Deux fichiers pour la même URL
À éviter
app/profil.tsxapp/(tabs)/profil.tsxÀ faire
app/(tabs)/profil.tsxPourquoi : Les groupes n'apparaissent pas dans l'URL : les deux fichiers répondraient à /profil.
Oublier d'exporter le composant
À éviter
function Accueil() { … }À faire
export default function Accueil() { … }Pourquoi : Expo Router affiche l'export par défaut de chaque fichier de route.
Mettre des composants partagés dans app/
À éviter
app/Bouton.tsxÀ faire
components/Bouton.tsxPourquoi : Tout fichier de app/ devient une route. Range les composants ailleurs.
5Subtilités à connaître
- ◆
router.replaceremplace l'écran courant sans pouvoir y revenir : idéal après une connexion. - ◆
useFocusEffectexécute du code à chaque fois qu'un écran redevient visible, contrairement à useEffect. - ◆Un
_layout.tsxpeut rediriger avec<Redirect href="/connexion" />pour protéger un groupe de routes.
6Vérifie ta compréhension
Question 1/3
Score 0
Quelle URL pour app/(tabs)/cours.tsx ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.