Introduction à React Native
React Native permet de créer des applications mobiles natives en utilisant JavaScript et React. Si vous connaissez React (R4A10), vous connaissez déjà 80% de React Native.
Qu'est-ce que React Native ?
React Native est un framework open source créé par Meta (Facebook) en 2015. Il permet d'écrire des applications mobiles iOS et Android en JavaScript, en utilisant les mêmes concepts que React web : composants, props, state, hooks.
La différence fondamentale avec React web : au lieu de produire des éléments HTML (<div>, <p>, <img>), React Native produit des composants natifs de chaque plateforme (UIView sur iOS, android.view.View sur Android).
React web : JSX → Virtual DOM → DOM HTML → Navigateur
React Native : JSX → Virtual DOM → Composants natifs → iOS / Android
Natif, pas WebView
React Native ne fait pas tourner votre code dans un navigateur intégré (WebView). Les composants View, Text, Image sont traduits en composants natifs réels de chaque plateforme. C'est ce qui différencie React Native des solutions hybrides comme Ionic.
Architecture de React Native
Le pont (Bridge) - Architecture classique
Dans l'architecture originale de React Native, un pont (bridge) permet la communication entre le code JavaScript et le code natif :
┌─────────────────────┐ ┌──────────────────────┐
│ JavaScript │ │ Natif │
│ │ │ │
│ Votre code React │────▶│ UIKit (iOS) │
│ + Logique métier │◀────│ Android Views │
│ │ │ │
└─────────────────────┘ └──────────────────────┘
Bridge (JSON sérialisé)
Le code JavaScript tourne dans un moteur JavaScript (JavaScriptCore ou Hermes). Quand vous écrivez <View>, React Native envoie un message via le bridge pour créer un composant natif correspondant.
La nouvelle architecture (JSI / TurboModules)
Depuis 2024, React Native utilise une nouvelle architecture plus performante. Le bridge JSON est remplacé par JSI (JavaScript Interface), qui permet au code JavaScript d'appeler directement les fonctions natives, sans sérialisation.
Pas besoin de tout comprendre
L'architecture interne de React Native évolue, mais en tant que développeur, votre code ne change pas. Vous écrivez des composants React, et React Native se charge de la traduction en composants natifs. La nouvelle architecture améliore les performances de manière transparente.
React web vs React Native
La syntaxe est identique, seuls les composants de base changent :
// React web (R4A10)
function ProfileCard({ name, bio }) {
return (
<div className="card">
<h2>{name}</h2>
<p>{bio}</p>
</div>
);
}
// React Native (R4A11)
function ProfileCard({ name, bio }) {
return (
<View style={styles.card}>
<Text style={styles.name}>{name}</Text>
<Text style={styles.bio}>{bio}</Text>
</View>
);
}
Ce qui reste identique
- Les composants fonctionnels : même syntaxe
function MonComposant() {} - Les props : même passage et destructuration
- Le JSX : même logique avec
{}pour les expressions - Les hooks :
useState,useEffectfonctionnent de la même manière - La logique : conditions, boucles,
.map(), événements
Ce qui change
| Concept | React web | React Native |
|---|---|---|
| Conteneur | <div> | <View> |
| Texte | <p>, <h1>, <span> | <Text> |
| Image | <img src="..."> | <Image source={...} /> |
| Styles | CSS, className | StyleSheet, prop style |
| Scroll | Automatique (navigateur) | <ScrollView> explicite |
| Clic | onClick | onPress |
| Navigation | React Router (URLs) | Expo Router (fichiers) |
Quelle est la principale différence entre React web et React Native ?
Pourquoi Expo ?
Expo est un ensemble d'outils et de services qui facilite le développement avec React Native. Sans Expo, configurer React Native nécessite d'installer Xcode, Android Studio, configurer les SDKs, les émulateurs, etc. Expo gère tout cela pour vous.
Ce qu'Expo apporte
- Création de projet rapide :
npx create-expo-app@latestau lieu d'une configuration manuelle - Expo Go : application mobile pour tester votre code instantanément (pas besoin d'émulateur)
- SDK Expo : accès aux fonctionnalités natives (caméra, GPS, notifications) via des API JavaScript
- Expo Router : système de navigation basé sur les fichiers (comme Next.js)
- EAS (Expo Application Services) : compilation et déploiement sur les stores
Expo Go vs Development Build vs EAS Build
| Outil | Usage | Quand l'utiliser |
|---|---|---|
| Expo Go | App mobile pré-installée qui charge votre projet en Wi-Fi | Développement et prototypage rapide (ce cours) |
| Development Build | Version personnalisée d'Expo Go avec vos modules natifs | Quand Expo Go ne supporte pas un module nécessaire |
| EAS Build | Compilation dans le cloud pour générer les fichiers .apk / .ipa | Publication sur les stores (App Store, Google Play) |
Pour ce cours
Nous utilisons Expo Go pour le développement. C'est la méthode la plus rapide pour tester : vous scannez un QR code avec votre téléphone et l'application se charge instantanément, avec rechargement automatique à chaque modification du code.
Pourquoi utilise-t-on Expo plutôt que React Native seul ?
Comparaison avec Vite (R4A10)
En R4A10, vous avez utilisé Vite pour créer vos projets React web. Expo joue un rôle similaire pour React Native :
| Vite (React web) | Expo (React Native) | |
|---|---|---|
| Création de projet | npm create vite@latest | npx create-expo-app@latest |
| Lancement | npm run dev | npx expo start |
| Rechargement auto | HMR dans le navigateur | Fast Refresh sur le téléphone |
| Où voir le résultat | Navigateur (localhost:5173) | Expo Go sur téléphone (ou émulateur) |
| Routing | React Router (config manuelle) | Expo Router (file-based) |
Quel outil est l'équivalent de Vite pour React Native ?
À retenir
Comprendre, pas mémoriser
React Native :
- Framework cross-platform par Meta, basé sur React
- Produit des composants natifs (pas de WebView)
- Même JavaScript, mêmes hooks, mêmes concepts que React web
- Composants différents :
Viewau lieu dediv,Textau lieu dep
Expo :
- Ensemble d'outils qui simplifie le développement React Native
- Expo Go : tester sur votre téléphone en scannant un QR code
- Expo Router : navigation basée sur les fichiers
- Équivalent de Vite pour le mobile