
Modules JavaScript (import/export) pour les composants
Apprenez à utiliser les modules JavaScript ES6 (import et export) pour organiser vos composants React dans des fichiers séparés, améliorant la structure et la réutilisabilité.
Le besoin d'organisation : Eviter le chaos
Imaginez une application React de taille moyenne ou grande où tous les composants (fonctionnels ou classe) seraient définis dans un seul et unique fichier JavaScript. Ce fichier deviendrait rapidement énorme, illisible, et extrêmement difficile à maintenir ou à déboguer. La modification d'un seul composant nécessiterait de naviguer dans des centaines, voire des milliers de lignes de code.
Pour éviter ce chaos, nous utilisons une fonctionnalité standard de JavaScript moderne (depuis ES6/ES2015) : les Modules. Les modules nous permettent de découper notre code en fichiers plus petits et logiquement groupés. Chaque fichier peut contenir un ou plusieurs composants, fonctions, ou variables, et choisir explicitement ce qu'il souhaite rendre accessible aux autres fichiers (`export`) et ce dont il a besoin depuis d'autres fichiers (`import`).
Cette approche modulaire est absolument fondamentale pour construire des applications React structurées, organisées et maintenables.
Exporter des composants : `export` et `export default`
Pour qu'un composant défini dans un fichier (par exemple, `Button.js`) puisse être utilisé dans un autre fichier (par exemple, `App.js`), il doit être exporté depuis son fichier d'origine. Il existe deux types principaux d'exports en JavaScript :
- Export par défaut (`export default`) : Chaque fichier module ne peut avoir qu'un seul export par défaut. C'est généralement utilisé pour exporter la fonctionnalité principale ou l'élément le plus important du fichier. Pour les composants React, il est très courant d'utiliser `export default` pour le composant principal défini dans ce fichier.
// Dans le fichier src/components/Button.js
import React from 'react';
function Button(props) {
// ... logique du bouton ...
return ;
}
// Exportation par défaut du composant Button
export default Button;- Exports nommés (`export`) : Un fichier module peut avoir plusieurs exports nommés. C'est utilisé pour exporter plusieurs variables, fonctions, ou composants depuis un même fichier. L'exportation se fait en plaçant le mot-clé `export` devant la déclaration de la fonction, classe, ou variable, ou en utilisant une syntaxe d'export groupée à la fin du fichier.
// Dans le fichier src/utils/helpers.js
// Export nommé d'une fonction
export function formaterDate(date) {
// ... logique de formatage ...
return date.toLocaleDateString();
}
// Export nommé d'une constante
export const PI = 3.14159;
// --- Autre syntaxe possible (export groupé) ---
/*
function formaterDate(date) { ... }
const PI = 3.14159;
export { formaterDate, PI };
*/La convention la plus répandue dans l'écosystème React est de définir un seul composant par fichier et de l'exporter en utilisant `export default`. Cela simplifie les imports.
Importer des composants : `import`
Une fois qu'un composant (ou une autre valeur) a été exporté d'un fichier, vous pouvez l'utiliser dans un autre fichier en l'important. La syntaxe de l'import dépend du type d'export utilisé dans le fichier source :
- Importer un export par défaut : Vous donnez un nom (qui peut être différent du nom original, bien qu'il soit fortement recommandé d'utiliser le même nom pour la clarté) à ce que vous importez.
// Dans le fichier src/App.js
import React from 'react';
// Importation de l'export par défaut depuis Button.js
import MonSuperBouton from './components/Button.js'; // Vous choisissez le nom 'MonSuperBouton'
// Il est préférable d'utiliser le nom original :
// import Button from './components/Button.js';
function App() {
const handleClick = () => alert('Clic !');
return (
Mon App
Cliquez-moi
);
}
export default App;- Importer des exports nommés : Vous devez utiliser le nom exact qui a été exporté, et le placer entre accolades `{}`. Vous pouvez importer plusieurs exports nommés en les séparant par des virgules. Vous pouvez également les renommer à l'import avec le mot-clé `as`.
// Dans un autre fichier, par exemple src/components/AffichageDate.js
import React from 'react';
// Importation des exports nommés depuis helpers.js
import { formaterDate, PI } from '../utils/helpers.js';
// Importation avec renommage
// import { formaterDate as fd, PI as constantePi } from '../utils/helpers.js';
function AffichageDate() {
const aujourdhui = new Date();
return (
Date : {formaterDate(aujourdhui)} | Pi : {PI}
);
}
export default AffichageDate;- Importer un mix : Vous pouvez importer l'export par défaut et des exports nommés du même fichier en une seule ligne.
// Supposons que 'monModule.js' ait un export default et des exports nommés
import MonModuleParDefaut, { exportNomme1, exportNomme2 } from './monModule.js';Chemins d'importation
Les chemins que vous utilisez dans les instructions `import` sont importants :
- Imports relatifs : Commencent par `./` (même dossier) ou `../` (dossier parent). Ils sont relatifs au fichier actuel. Exemple : `import Button from './Button.js';`
- Imports absolus (depuis `node_modules`) : Lorsque vous importez une dépendance installée (comme React lui-même), vous utilisez simplement le nom du paquet. Le système de modules sait chercher dans le dossier `node_modules`. Exemple : `import React from 'react';`
- Imports absolus (depuis la racine `src/`) : Les outils de build comme CRA ou Vite sont souvent configurés pour que vous puissiez importer depuis la racine du dossier `src` sans utiliser de chemins relatifs complexes. Exemple (si configuré) : `import Button from 'components/Button';` (au lieu de `../../components/Button`).
L'extension du fichier (`.js`, `.jsx`, `.ts`, `.tsx`) est souvent facultative dans les imports si les outils de build sont correctement configurés.
Conclusion : Structurer pour grandir
L'utilisation efficace des modules JavaScript (`export` et `import`) est indispensable pour organiser vos composants React et le reste de votre code. En plaçant les composants dans des fichiers séparés et en utilisant `export default` (le plus souvent) ou `export` pour les rendre disponibles, puis en les important là où vous en avez besoin, vous créez une structure de projet claire, modulaire et facile à naviguer.
Cette approche est non seulement une bonne pratique fondamentale en JavaScript moderne, mais elle est aussi essentielle pour gérer la complexité croissante des applications React à mesure qu'elles évoluent.