Module React

Un module React est un fichier JavaScript/JSX autonome qui encapsule une unité fonctionnelle réutilisable (composant, hook personnalisé, utilitaire, constante) et l’exporte explicitement pour être consommé par d’autres parties de l’application via import/export.

Ce n’est pas spécifique à React : C’est l’application des modules ES6 (standard JavaScript) à l’écosystème React.
React exploite ce système, il ne le crée pas.

Caractéristiques clés

Concept Explication
Portée isolée Variables internes invisibles à l’extérieur (pas de fuite globale)
Dépendances explicites Tous les import déclarés en haut → traçabilité totale
Interopérabilité Fonctionne avec tous les bundlers (Vite, Webpack…) et runtimes modernes
Réutilisabilité Un module = une brique testable, documentable, partageable
Tree-shakable Code non utilisé éliminé automatiquement en production (si exports nommés)

Exemple ultra-simple

Création de l’application

npm create vite@latest mon-app -- --template react
cd mon-app
npm install
npm run dev

Ouvrez http://localhost:5173

Module « Bonjour » (0 prop)

Fichier : src/components/Bonjour.jsx

/Ce composant Bonjour est un composant fonctionnel qui retourne un élément JSX. Lorsque ce composant est utilisé dans une application React, il affichera le message « Salut depuis un module ! » dans une balise h1.

export default function Bonjour() {
  return <h1>Salut depuis un module !</h1>
}

Modifiez src/App.jsx :

import "./App.css";
import Bonjour from "./components/Bonjour";

function App() {
  return (
    <>
      <div>
        <Bonjour />
      </div>
    </>
  );
}

export default App;

Résultat : Page affiche « Salut depuis un module ! »
Modifiez le texte dans Bonjour.jsxHMR instantané (pas de rechargement !)

Module « Badge » (avec props)

Badge.jsx

const Badge = ({ txt }) => <span style={{ background: "#4ade80", padding: "4px 12px", borderRadius: "6px" }}>{txt}</span>;

export default Badge;

Modifiez src/App.jsx

import "./App.css";
import Badge from "./components/Badge";

function App() {
  return (
    <>
      <div style={{ padding: "2rem" }}>
        <Badge txt="Nouveau" />
      </div>
    </>
  );
}

export default App;
Les contenus de définition restent publics. Les ressources (outils, grilles, supports) liées à cette fiche sont disponibles dans l’espace membre.