Dev mobile avec React Native & Expo
Démarrer l'apprentissage du dév React Native pour créer des applications mobile Android & IOS par le tuto officiel Expo (recommandé dans la doc officielle React Native).
Expo is a framework that makes developing Android and iOS apps easier. Our framework provides file-based routing, a standard library of native modules, and much more.
Pré-requis
Pour commencer, il nous faudra les éléments suivants sur notre poste de dev :
- Expo Go (app mobile) installé sur un appareil physique, c'est l'appli IOS & Android qui permet de faire tourner notre application en direct
- Node.js (version LTS)
- VS Code, Cursor ou tout autre IDE
- macOS, Linux ou Windows pour les courageux (avec PowerShell et WSL2)
Initialisation du projet
Dans un terminal :
# initialiser notre projet avec le template de projet par défaut (contient tout l'outillage Expo pour dev)
npx create-expo-app@latest NomDeNotreProjet && cd NomDeNotreProjet
# reset le projet pour avoir une base propre
npm run reset-project
# 🚀
npx expo start
Styling
En React Native, le style est appliqué en javascript via la prop style qui prend en valeur un objet javascript (ou un tableau dont le dernier style domine les précédents), avec des clé valeurs ressemblant à des couples propriété/valeur CSS.
Il est recommandé d'utiliser StyleSheet.create
de la lib React Native pour créer un objet StyleSheet (qui ne sera par recréé à chaque rendu et optimisé pour les rendus et animations natives). Cela offre également du type checking.
Un pattern courant consiste à faire en sorte que votre composant prenne une prop style qui, à son tour, est utilisée pour styliser les sous-composants. Vous pouvez ainsi faire en sorte que les styles « cascadent » comme dans les CSS.
Voir aussi :
- différentes façons de représenter les couleurs en React Native (également avec des noms de couleurs)
- section "Edit the index screen" du tuto Expo.
Routing
On utilisera Expo router qui est un framework de routing qui permet de faire du file based routing avec :
- un dossier spécial
/app
va contenir les routes et layouts - le dossier
/components
est en dehors du système de routage (/app
) par convention n'interviennent pas dans le routage - le layout racine
/app/_layout.tsx
va contenir les éléments communs à toutes les écrans/pages (ex: headers/footers) - l'arborescence dessous
/app
va déterminer le chemin d'accès via des URLs correspondants aux fichiers.tsx
- les fichiers
index.tsx
seront transparents dans les URLs
(ex :/app/toto/index.tsx
sera accédé via l'URL/app/toto
) - les autres fichiers (autre que
index.tsx
) seront accédés par une URL correspondant au chemin + nom de fichier (sans l'extension.tsx
)
(ex:/app/titi/formulaire.tsx
sera accédé par/app/titi/formulaire
) - le dossier spécial
/app/(xxx)
oui oui avec les parenthèses, est utilisé par Expo Router pour regrouper des routes avec un layout commun par ex sans que lexxx
apparaisse dans le chemin d'accès
(ex:/app/(tabs)/about.tsx
sera accédé par/app/about
)
Voir aussi :
- Introduction to Expo Router dans la doc Expo
- la vidéo officielle Using a Tab Navigator with Expo Router
Démarrer les projets plus rapidement : Ignite
Ignite is the battle-tested React Native boilerplate
Developers who use Ignite report that it saves them
2-4 weeks spinning up a new project!
Lorsqu'on démarre un projet "green field", on passe souvent par les mêmes étapes de choix d'architecture et d'outillage, mais on se rend vite compte que 80% de nos projets Front/Mobile ont les meme besoins : certains types de layouts, expo et ses libs, authentification, i18n etc. C'est le constat qui a amené l'équipe de Infinite Red a créer ✨ Ignite ✨ qui grace à sa CLI, nous permet de bootstraper un projet en qqs secondes !
Voir aussi le Ignite Cookbook pour React Native qui est un ensemble de tips et guides.
Liens et docs
Documentation
- React Native Guides, Core Components & API
- React Native Directory (third-party libraries)
- Expo
- Les indispensable libs de Software Mansion :
- React Native Reanimated
- React Native Gesture Handler
Videos Youtube
- la chaine @ExpoDevelopers
- les playlists de référence Expo et React Native de @codewithbeto
- la playlist React Native de Simon Grimm
- playlist Reanimated de @SoftwareMansion