
Différences clés avec React pour le web
Explorez les différences fondamentales entre React Native (mobile) et React DOM (web) : composants UI, styling, navigation, API natives et environnement de développement.
Fondations communes, expressions différentes
Bien que React Native partage la même philosophie et les mêmes concepts de base que React pour le web (React DOM) – composants, props, state, hooks, JSX, approche déclarative – il existe des différences fondamentales dues à la nature distincte des plateformes cibles (mobile natif vs navigateur web). Comprendre ces différences est essentiel pour passer efficacement du développement web React au développement mobile avec React Native.
Le mantra "Learn once, write anywhere" est vrai pour les concepts React, mais pas pour l'intégralité du code. Vous ne pouvez pas simplement copier-coller un composant web React et vous attendre à ce qu'il fonctionne nativement sur mobile. Les différences se situent principalement au niveau de la couche de rendu, du styling, de la navigation et de l'accès aux API spécifiques à l'environnement.
Couche de rendu : Composants natifs vs DOM HTML
C'est la différence la plus fondamentale. React DOM rend vos composants React en éléments du DOM HTML standard ( React Native, lui, n'utilise pas le DOM HTML ni les WebViews pour le rendu principal. Il fournit son propre ensemble de composants de base, écrits en React, qui agissent comme des ponts vers les widgets UI natifs réels d'iOS et d'Android. Au lieu d'écrire : Bonjour ! Vous écrirez en React Native : Ici, Puisqu'il n'y a pas de DOM HTML, il n'y a pas non plus de CSS au sens traditionnel du terme dans React Native. Le styling se fait entièrement via des objets JavaScript. La syntaxe ressemble beaucoup au CSS, mais elle est écrite en L'API Sur le web, la navigation est gérée par le navigateur via les URL et l'API History. Des bibliothèques comme React Router s'appuient sur ces mécanismes. Dans React Native, il n'y a pas de navigateur ni d'URL au sens web. La navigation entre les différents écrans de l'application est gérée par des bibliothèques de navigation dédiées. La plus populaire est React Navigation, qui fournit différentes stratégies de navigation (Stack, Tabs, Drawer) et les composants nécessaires pour les implémenter de manière native sur iOS et Android. La configuration et l'utilisation de la navigation sont donc très différentes de celles du web. React Native doit pouvoir interagir avec les fonctionnalités spécifiques des appareils mobiles qui n'existent pas sur le web : caméra, GPS, accéléromètre, stockage local natif, notifications push, contacts, etc. React Native expose un certain nombre de ces fonctionnalités via ses API intégrées (ex: `Geolocation`, `PermissionsAndroid`, `AppState`). Pour des fonctionnalités plus avancées ou spécifiques, on utilise des modules natifs tiers (souvent installés via npm/yarn, puis liés au projet natif) ou on peut même écrire ses propres modules natifs en Java/Kotlin ou Objective-C/Swift et les exposer au JavaScript via le système de pontage de React Native. L'environnement de développement diffère également. Au lieu d'un simple `npm start` lançant un serveur de développement web, vous aurez besoin : Des plateformes comme Expo simplifient considérablement ce processus de configuration et de build initial, en fournissant un SDK géré et des outils cloud, mais elles peuvent avoir certaines limitations par rapport à un projet React Native "bare" (vanilla). En résumé, si les principes fondamentaux de React restent les mêmes, le passage de React DOM à React Native nécessite d'apprendre et d'utiliser de nouveaux composants d'interface utilisateur, une approche différente du styling (basée sur JavaScript et Flexbox), des bibliothèques de navigation spécifiques au mobile, et des méthodes pour interagir avec les API natives. L'environnement de développement et le processus de build sont également distincts. Malgré ces différences, la familiarité avec React, JSX, la gestion d'état et les hooks constitue un avantage considérable et rend la courbe d'apprentissage de React Native beaucoup plus douce pour un développeur React web que d'apprendre le développement natif iOS ou Android à partir de zéro., , , etc.) qui sont interprétés par le navigateur web.// React pour le Web (React DOM)
// React Native
import { View, Text, Button, StyleSheet } from 'react-native';
est l'équivalent le plus proche d'un est nécessaire pour afficher du texte (le texte ne peut pas être mis directement dans un ), et est un composant bouton natif. React Native traduira ces éléments en UIView/UILabel/UIButton sur iOS et en ViewGroup/TextView/Button sur Android.Styling : JavaScript et Flexbox au lieu de CSS
camelCase (ex: backgroundColor au lieu de background-color) et utilise un sous-ensemble des propriétés CSS.StyleSheet.create({}) est généralement utilisée pour définir les styles de manière organisée et optimisée (elle peut transformer les objets de style en identifiants numériques pour de meilleures performances). Le modèle de mise en page principal est Flexbox. Presque toute la mise en page dans React Native repose sur Flexbox, qui fonctionne de manière très similaire (avec quelques légères différences) à son implémentation web. Il n'y a pas de Grid Layout CSS ou de positionnement `float` par exemple.import { StyleSheet } from 'react-native';
const styles = StyleSheet.create({
container: {
flex: 1, // Occupe tout l'espace disponible
justifyContent: 'center', // Centre verticalement (axe principal par défaut)
alignItems: 'center', // Centre horizontalement (axe secondaire)
backgroundColor: '#f5f5f5',
padding: 20,
},
text: {
fontSize: 18,
fontWeight: 'bold', // Notez le camelCase
color: '#333',
marginBottom: 10, // Unités sans dimension (densité-indépendantes)
},
});Navigation : Bibliothèques dédiées vs API du navigateur
Accès aux API natives et Modules spécifiques
Environnement de développement et de build
Conclusion : Des adaptations nécessaires mais des compétences transférables