Aller au contenu
useffect.sh
Planifier 30 min avec un senior
Interface

React Navigation

La librairie de navigation de référence de React Native : stack, tabs, drawer, avec des écrans natifs via react-native-screens.

Définition

React Navigation est la librairie de navigation la plus répandue de l’écosystème React Native, un projet communautaire indépendant du cœur de React Native. Elle fournit des navigateurs (native stack, stack JavaScript, bottom tabs, drawer) qui gèrent les transitions entre écrans, l’historique, les en-têtes et la barre d’onglets. Le navigateur native-stack s’appuie sur react-native-screens pour utiliser les vrais UINavigationController et Fragment de chaque plateforme, avec les gestes et animations du système. La version 7 propose une API statique (configuration par objet, types TypeScript et deep linking déduits automatiquement) à côté de l’API dynamique historique à base de composants. React Navigation remplace les solutions purement JavaScript des débuts de React Native et a servi de base à Expo Router jusqu’au SDK 55 ; depuis le SDK 56, Expo Router embarque sa propre copie de ces API. Vous la rencontrez dans tout projet React Native sans Expo Router.

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.

Sources

Les 35 termes du glossaire

Un de ces sujets bloque votre app ?

30 minutes avec un senior pour regarder le problème dans votre code. Gratuit.