React Débutant

React : Maîtriser les Fondamentaux des Interfaces Modernes

Découvrez comment React révolutionne la création d'interfaces web en décomposant vos applications en briques réutilisables. Ce cours vous guide pas à pas pour transformer des concepts théoriques en compétences pratiques, sans prérequis technique.

Preparetoi.academy 60 min

1. Les Fondamentaux de React et l'Écosystème Frontend

Définition
React est une bibliothèque JavaScript créée par Facebook qui permet de construire des interfaces utilisateur (UI) en décomposant le code en composants réutilisables. Un composant est une partie autonome et isolée de votre application qui gère son propre rendu et son état.

Analogie Simple
Imaginez que vous construisez une maison avec des briques. Au lieu d'utiliser un bloc géant pour chaque mur, vous utilisez des petites briques que vous assemblez. Chaque brique peut être réutilisée ailleurs, modifiée indépendamment, et remplacée sans affecter la structure globale. React fonctionne exactement comme cela avec vos interfaces : vous créez des petits composants (briques) que vous assemblez pour former une application complète.

Tableaux Comparatifs

Aspect HTML/CSS/JS Traditionnel React
Approche Modification directe du DOM Gestion déclarative de l'interface
Réutilisabilité Code dupliqué Composants réutilisables
Maintenance Difficile avec la croissance Scalable et organisée
Performance Mise à jour manuelle inefficace Virtual DOM optimise les mises à jour
Courbe d'apprentissage Moins abrupte Plus progressive mais structurée

Astuce Pédagogique
Avant de plonger dans le code, comprenez que React résout un problème simple : comment maintenir votre interface utilisateur en synchronisation avec vos données. C'est le cœur de tout ce que fait React. Gardez cette idée en tête pour chaque concept que vous apprendrez.

⚠️ Attention
React n'est pas du HTML. C'est du JavaScript qui génère du HTML. Vous devez penser en JavaScript, pas en balises HTML. Cette distinction est cruciale pour éviter de vous perdre dans vos premiers pas.

React s'inscrit dans l'écosystème des frameworks frontend modernes. Avant React, les développeurs devaient gérer manuellement chaque changement dans le DOM (Document Object Model) lorsque les données changeaient. Cela créait du code complexe, difficile à maintenir et sujet aux bugs. React introduit le concept du Virtual DOM, une représentation JavaScript de ce que devrait être l'interface. Lorsque les données changent, React compare automatiquement l'ancien Virtual DOM avec le nouveau, puis met à jour uniquement les parties du vrai DOM qui ont changé. Cette approche rend les applications beaucoup plus performantes et le code plus lisible.

Le DOM traditionnel est comme une page dans un vrai livre : si vous voulez changer un mot, vous devez modifier physiquement le livre. Le Virtual DOM de React est comme une copie numérique que vous modifiez, puis vous ne répercutez que les changements au livre physique. C'est plus efficace et moins perturbateur.

React a révolutionné le développement frontend en 2013 en popularisant l'idée des composants réutilisables et du rendu déclaratif. Aujourd'hui, des millions d'applications utilisent React, du Facebook.com aux petits sites d'entreprise. C'est un choix sûr pour apprendre le développement frontend moderne.

2. Les Composants : Les Briques Fondamentales

Définition
Un composant React est une fonction JavaScript (ou une classe) qui retourne du JSX (une syntaxe qui mélange JavaScript et HTML-like) pour décrire ce qui doit apparaître à l'écran. Les composants encapsulent la logique, l'apparence et le comportement d'une partie de votre application.

Analogie Simple
Pensez à un composant comme à une moule à gâteau. Vous créez la moule une fois (le composant), puis vous pouvez l'utiliser autant de fois que vous voulez pour créer des gâteaux identiques (des instances du composant). Si vous avez besoin de gâteaux légèrement différents, vous pouvez passer des ingrédients différents à la moule (les props), et elle s'adapte automatiquement.

Tableaux Explicatifs

Caractéristique Description Exemple
JSX Syntaxe qui mélange JS et HTML <Bouton texte="Cliquez" />
Props Paramètres passés au composant function Accueil(props) {}
État (State) Données qui changent dans le temps Compteur qui augmente
Enfants (Children) Contenu à l'intérieur du composant <Conteneur><Titre/></Conteneur>

Astuce Pédagogique
Commencez par créer des composants très simples qui ne font qu'afficher du texte ou des boutons. Une fois que vous comprenez comment fonctionnent les props et le rendu basique, progressez vers des composants plus complexes avec état et logique. Cette progression graduée vous évitera de vous sentir submergé.

⚠️ Attention
Les noms des composants React doivent TOUJOURS commencer par une majuscule (ex: MaBouton, Accueil). Si vous écrivez maBouton, React le confondra avec une balise HTML standard et vous obtiendrez une erreur. Cette convention existe pour que React distingue vos composants personnalisés des éléments HTML natifs.

Il existe deux types de composants : les composants fonctionnels et les composants de classe. Aujourd'hui, les composants fonctionnels sont la norme car ils sont plus simples et plus puissants (notamment grâce aux hooks que vous apprendrez). Un composant fonctionnel est simplement une fonction JavaScript qui retourne du JSX.

Le JSX peut sembler étrange au début parce qu'il mélange syntaxe JavaScript et HTML. Mais c'est en réalité une syntaxe de transformation : le JSX est compilé en appels JavaScript normaux. Quand vous écrivez <Bouton />, c'est transformé en React.createElement(Bouton). Le JSX rend simplement le code plus lisible et plus intuitif.

Les props (propriétés) sont comment vous passez des données à un composant. Elles sont immuables, ce qui signifie qu'un composant ne peut pas les modifier. Les props viennent du parent et vont vers l'enfant : c'est une communication unidirectionnelle. Si vous avez besoin d'une donnée qui change, vous utilisez l'état (state).

3. L'État (State) et le Cycle de Vie des Composants

Définition
L'état (state) est une donnée qui appartient à un composant et qui peut changer au cours du temps. Chaque fois que l'état change, React redessine (re-render) automatiquement le composant pour refléter les modifications. Le cycle de vie décrit les différentes phases par lesquelles passe un composant : création, mise à jour et suppression.

Analogie Simple
Imaginez un thermostat intelligent. Les props seraient la température cible (fixée par le propriétaire et ne pouvant pas être modifiée par le thermostat lui-même). L'état serait la température actuelle mesurée par le capteur (elle change tout le temps). Chaque fois que la température change, le thermostat réagit : il chauffe ou refroidit selon les données à jour.

Tableaux Conceptuels

Phase du Cycle de Vie Moment Utilisation
Montage (Mount) Le composant est créé et affiché Initialiser, charger des données
Mise à Jour (Update) L'état ou les props changent Réagir aux changements
Démontage (Unmount) Le composant disparaît Nettoyer les ressources

État vs Props

Aspect État Props
Peut-il changer ? Oui, avec setState() Non, immuable
Qui contrôle ? Le composant lui-même Le composant parent
Doit-il être partagé ? Localisé au composant Passé du parent à l'enfant
Utilité Données dynamiques internes Configuration externe

Astuce Pédagogique
Posez-vous cette question simple avant chaque donnée : "Cette donnée doit-elle changer ?" Si oui, c'est de l'état. Si elle vient du parent et ne change pas, c'est une prop. Cette règle résout 90% de vos questions sur state vs props.

⚠️ Attention
JAMAIS modifier directement l'état (ex: this.state.compteur = 5). Vous DEVEZ utiliser setState() ou le hook useState(). Si vous modifiez directement l'état, React ne saura pas que quelque chose a changé et ne re-rendrera pas votre composant. Votre interface restera désynchronisée de vos données.

Pour les composants fonctionnels (recommandés), vous utilisez le hook useState() pour créer et gérer l'état. Un hook est une fonction spéciale de React qui vous permet d'utiliser certaines fonctionnalités sans avoir besoin de classes. Le hook useState() prend une valeur initiale et retourne un tableau avec deux éléments : la valeur actuelle de l'état et une fonction pour la mettre à jour.

Quand vous modifiez l'état, React ne change pas le composant instantanément. React planifie une mise à jour et la fait au moment opportun. Cela rend tout plus performant car React peut regrouper plusieurs changements d'état ensemble et n'appliquer qu'une seule mise à jour du DOM. Ce processus s'appelle le "batching".

Le cycle de vie des composants est important pour comprendre quand certaines choses se produisent. Par exemple, si vous avez besoin de charger des données depuis une API quand un composant apparaît pour la première fois, vous devez le faire à la phase de montage, pas à chaque rendu. Sinon, vous téléchargeriez les données à l'infini. C'est là que le hook useEffect() devient utile.

4. La Communication Entre Composants et le Flux de Données

Définition
React utilise un flux de données unidirectionnel appelé "data flow" : les données descendent du parent vers les enfants via les props, et les enfants communiquent avec les parents via des fonctions de callback. Cette architecture simple mais puissante empêche l'état de devenir chaotique et imprévisible.

Analogie Simple
Imaginez une chaîne de commandement dans une entreprise. Le PDG (composant parent) prend les décisions stratégiques et les communique aux managers (enfants) via des instructions (props). Les managers exécutent le travail et si un problème survient, ils remontent l'information au PDG via un rapport (callback). L'information ne remonte pas directement du bas sans passer par les intermédiaires, tout comme dans React l'enfant ne peut pas directement modifier l'état du parent.

Tableaux de Communication

Direction Mécanisme Exemple
Parent → Enfant Props <Enfant nom="Alice" />
Enfant → Parent Callback (fonction) <Enfant onClique={() => {}} />
Frère ↔ Frère État au parent commun État "remonté" au parent

Patterns Courants de Communication

Pattern But Quand l'utiliser
Props Drilling Passer des props à travers plusieurs niveaux Petits arbres de composants
Context API Éviter de passer les props à tous les niveaux Variables globales (thème, langue)
Props Drilling Modéré Passer une fonction callback de parent à enfant Actions simples

Astuce Pédagogique
Visualisez vos composants comme un arbre avec le composant racine au sommet. Les données descendent comme de l'eau : du haut vers le bas. Les événements remontent comme du feu : du bas vers le haut. Cette image mentale clarifiie le flux de données.

⚠️ Attention
Évitez le "props drilling" excessif (passer des props à travers 5+ niveaux de composants). C'est un signe que votre architecture devient complexe. Pour des données qui doivent être accessibles partout (thème, utilisateur connecté), utilisez plutôt Context API ou une bibliothèque de gestion d'état comme Redux (pour les applications avancées). Le props drilling modéré (2-3 niveaux) est normal et acceptable.

React impose une communication unidirectionnelle pour une raison : cela rend le code prévisible et facile à déboguer. Si deux composants pouvaient modifier l'état l'un de l'autre, vous vous retrouveriez rapidement avec du code "spaghetti" où il est impossible de suivre qui change quoi.

Pour communiquer de l'enfant vers le parent, vous passez une fonction du parent à l'enfant en tant que prop. L'enfant peut alors appeler cette fonction pour signaler que quelque chose s'est produit. Par exemple, si vous avez un composant Bouton enfant et un composant Compteur parent, le parent peut passer une fonction onClique au bouton. Quand l'utilisateur clique, le bouton appelle onClique(), ce qui augmente le compteur du parent.

Si vous avez plusieurs composants frères (au même niveau) qui doivent se partager une donnée, vous devez "remonter l'état" au composant parent commun. Le parent gère l'état et passe les données vers le bas par les props, et accepte les mises à jour vers le haut par les callbacks. C'est un pattern fondamental que vous verrez partout en React.

Pour les applications plus grandes, la Context API de React permet de passer des données sans avoir à les passer niveau par niveau. Vous créez un "contexte" global pour une certaine information (comme le thème de l'application), et n'importe quel composant peut accéder directement à cette information sans avoir besoin que chaque parent en passant le chemin.

5. Les Hooks : Superpuissance des Composants Fonctionnels

Définition
Les hooks sont des fonctions spéciales de React qui vous permettent d'utiliser l'état et d'autres fonctionnalités de React dans les composants fonctionnels (sans avoir besoin de classes). Les deux hooks fondamentaux sont useState() pour gérer l'état et useEffect() pour effectuer des actions après le rendu (comme charger des données depuis une API).

Analogie Simple
Les composants fonctionnels avant les hooks étaient comme une maison sans fenêtres : vous pouviez voir l'entrée et les portes, mais vous ne pouviez pas accéder à certaines pièces importantes. Les hooks sont comme des fenêtres et des portes supplémentaires qui vous donnent accès à toutes les fonctionnalités que vous aviez dans les composants de classe (la maison complète). Maintenant, les composants fonctionnels sont juste aussi puissants.

Tableaux des Hooks Essentiels

Hook Syntaxe Utilité
useState() const [etat, setEtat] = useState(initial) Gérer une donnée qui change
useEffect() useEffect(() => {}, [dependances]) Exécuter du code après rendu
useContext() const valeur = useContext(Context) Accéder à un contexte global
useCallback() useCallback(() => {}, [deps]) Mémoriser une fonction
useMemo() useMemo(() => {}, [deps]) Mémoriser une valeur calculée

Règles des Hooks

Règle Raison
Appelez les hooks en haut du composant (jamais dans les boucles/conditions) React dépend de l'ordre des appels
Appelez les hooks uniquement dans les composants React Ils ne fonctionnent que dans ce contexte
Utilisez le linter ESLint pour vous aider Il détectera les violations de règles

Astuce Pédagogique
Maîtrisez d'abord useState() et useEffect(). Ces deux hooks résolvents 95% des cas d'usage. Les autres hooks (useCallback, useMemo, etc.) sont des optimisations avancées que vous apprendrez plus tard une fois que vous maîtriserez les bases.

⚠️ Attention
Les hooks doivent TOUJOURS être appelés en haut de votre composant, jamais à l'intérieur de boucles, conditions, ou fonctions imbriquées. React utilise l'ordre des appels de hooks pour maintenir l'état correctement. Si vous appellez useState() conditionnellement, vous changerez l'ordre et React ne saura plus quel état est lequel. Cela entraînera des bugs imprévisibles.

Le hook useState() est le plus fondamental. Quand vous l'appelez, vous recevez la valeur actuelle de l'état et une fonction pour la mettre à jour. La mise à jour n'est pas synchrone : React planifie la mise à jour et mettra à jour le composant au moment opportun. Parfois, si vous essayez d'accéder à l'état immédiatement après l'avoir changé, vous obtiendrez l'ancienne valeur. C'est normal et attendu.

Le hook useEffect() vous permet d'exécuter du code après que le composant se soit rendu. C'est l'endroit idéal pour charger des données depuis une API, configurer un écouteur d'événement, ou modifier le titre de la page. Sans useEffect(), vous ne pouviez faire ces choses que dans les méthodes de cycle de vie des composants de classe, ce qui était verbeux et complexe.

Le deuxième argument de useEffect() est un tableau de dépendances. Il dit à React : "Réexécute cet effet uniquement si l'une de ces valeurs a changé." Si le tableau est vide, l'effet ne s'exécute qu'une seule fois au montage. Si le tableau est absent, l'effet s'exécute après chaque rendu (attention : cela peut créer des boucles infinies !). Comprendre les dépendances est crucial pour éviter les bugs.

Les hooks ont transformé React en le rendant plus simple et plus expressif. Avant les hooks, les composants de classe étaient la seule façon d'accéder à l'état, ce qui rendait le code plus verbeux. Aujourd'hui, les composants fonctionnels avec hooks sont la norme. C'est ce que vous devriez apprendre et utiliser.

Accédez à des centaines d'examens QCM — Découvrir les offres Premium