Dans une vraie app
Une installation correcte a @react-navigation/native, un ou plusieurs navigateurs, et les deux dépendances que presque tous exigent : react-native-screens et react-native-safe-area-context. Sur Expo, npx expo install choisit les versions compatibles avec le SDK. Sur Android, la doc demande une modification de MainActivity pour éviter des crashs quand l’état des vues n’est pas persisté à la recréation de l’Activity.
Le choix du navigateur de stack compte. @react-navigation/native-stack donne les transitions, le geste retour et le header du système ; @react-navigation/stack est en JavaScript, plus personnalisable, plus lourd, dépend de Gesture Handler et anime via l’API Animated. Un projet qui mélange les deux pour des raisons historiques paie deux fois. Autre piège fréquent : des écrans qui se remontent parce que component reçoit une fonction fléchée inline ou que le navigateur est recréé à chaque rendu du parent.
Le deep linking se configure dans linking (prefixes, config) et doit être testé sur les deux plateformes, app fermée et app ouverte, parce que getInitialURL et l’événement url suivent deux chemins différents. Pour un nouveau projet Expo, je conseille Expo Router, qui déduit cette configuration de l’arborescence ; pour un projet React Navigation existant qui fonctionne, migrer n’apporte pas grand-chose tant que la structure de navigation est stable.
Termes liés
Expo Router
Le routeur d’Expo basé sur les fichiers : chaque fichier du dossier app devient un écran, avec deep links et routes typées automatiques.
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).
Gesture Handler
La librairie de Software Mansion qui reconnaît les gestes (pan, tap, pinch…) côté natif et les combine, avec des callbacks exécutés sur le thread UI.
Reanimated
La librairie d’animation de Software Mansion qui exécute les animations sur le thread UI via des worklets, sans attendre le thread JavaScript.