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 :

jsx
// 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, useEffect fonctionnent de la même manière
  • La logique : conditions, boucles, .map(), événements

Ce qui change

ConceptReact webReact Native
Conteneur<div><View>
Texte<p>, <h1>, <span><Text>
Image<img src="..."><Image source={...} />
StylesCSS, classNameStyleSheet, prop style
ScrollAutomatique (navigateur)<ScrollView> explicite
CliconClickonPress
NavigationReact 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@latest au 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

OutilUsageQuand l'utiliser
Expo GoApp mobile pré-installée qui charge votre projet en Wi-FiDéveloppement et prototypage rapide (ce cours)
Development BuildVersion personnalisée d'Expo Go avec vos modules natifsQuand Expo Go ne supporte pas un module nécessaire
EAS BuildCompilation dans le cloud pour générer les fichiers .apk / .ipaPublication 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 projetnpm create vite@latestnpx create-expo-app@latest
Lancementnpm run devnpx expo start
Rechargement autoHMR dans le navigateurFast Refresh sur le téléphone
Où voir le résultatNavigateur (localhost:5173)Expo Go sur téléphone (ou émulateur)
RoutingReact 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 : View au lieu de div, Text au lieu de p

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