Dans une vraie app
Un projet Expo Router se reconnaît à son dossier app/ (ou src/app/), à un _layout.tsx racine qui rend Stack ou Tabs, à des groupes entre parenthèses comme (tabs) ou (auth) et à des routes dynamiques [id].tsx. La navigation passe par Link avec un href, ou par useRouter() (push, replace, back, dismissTo) ; useNavigation reste réservé aux API spécifiques du navigateur (événements, options). Les routes typées s’activent dans app.json avec experiments.typedRoutes et génèrent un fichier .d.ts qui transforme un lien vers une route inexistante en erreur TypeScript.
Le SDK 58 est une rupture pour les projets qui lisaient l’état de navigation ou utilisaient les paramètres screen, params et initial pour cibler un écran imbriqué : ce sont maintenant des paramètres utilisateur ordinaires, et le guide de migration recommande de naviguer vers un href complet. initialRouteName disparaît au profit de unstable_settings.anchor, et de nombreuses API de compatibilité de expo-router/react-navigation ont été retirées. Sur un projet qui a un routeur custom ou des navigation.dispatch, cette migration se budgète.
Ce que je vérifie : que les deep links sont testés avec npx uri-scheme open ou xcrun simctl openurl, que les écrans de la stack ne sont pas remontés en boucle à cause d’un _layout qui rend conditionnellement selon l’auth (préférer Redirect ou Stack.Protected), et que l’app n’importe pas @react-navigation/* à côté d’Expo Router.
Termes liés
React Navigation
La librairie de navigation de référence de React Native : stack, tabs, drawer, avec des écrans natifs via react-native-screens.
Deep linking
Ouvrir un écran précis de l’app depuis une URL : schéma custom (monapp://) ou lien https vérifié (universal links, App Links).
Universal links et App Links
Des liens https ordinaires qui ouvrent l’app quand elle est installée, prouvés par un fichier hébergé sur votre domaine (AASA, assetlinks.json).
Expo
Le framework open source recommandé par React Native : SDK de modules natifs, CLI, prebuild, Expo Router, et les services cloud EAS.
Fast Refresh
Le rechargement à chaud de React Native : une modification de composant est appliquée en une à deux secondes en conservant l’état local.