Modules ES6
Organisez votre code en fichiers séparés avec les imports et exports.
Export
Export nommé
Plusieurs exports par fichier possibles.
javascript
// utils.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
export const PI = 3.14159;
export function greet(name) {
return `Hello ${name}!`;
}
Export par défaut
Un seul export par défaut par fichier.
javascript
// Button.js
export default function Button() {
return <button>Click me</button>;
}
Export après déclaration
javascript
// utils.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
export { add, subtract };
Export avec renommage
javascript
// utils.js
const add = (a, b) => a + b;
export { add as sum };
Import
Import nommé
Les noms doivent correspondre exactement.
javascript
// app.js
import { add, subtract } from './utils.js';
console.log(add(2, 3)); // 5
console.log(subtract(5, 2)); // 3
Import par défaut
Vous pouvez choisir le nom.
javascript
// app.js
import Button from './Button.js';
import MyButton from './Button.js'; // Même chose
// Utilisation
<Button />
<MyButton />
Import avec renommage
javascript
// app.js
import { add as sum, subtract as diff } from './utils.js';
console.log(sum(2, 3)); // 5
console.log(diff(5, 2)); // 3
Tout importer
javascript
// app.js
import * as utils from './utils.js';
console.log(utils.add(2, 3)); // 5
console.log(utils.subtract(5, 2)); // 3
Combiner default et nommés
javascript
// Button.js
export default function Button() {
return <button>Click</button>;
}
export const ButtonVariant = () => {
return <button className="variant">Click</button>;
};
javascript
// app.js
import Button, { ButtonVariant } from './Button.js';
<Button />
<ButtonVariant />
En React
Les modules sont essentiels en React pour organiser vos composants :
javascript
// Import des hooks React (exports nommés)
import { useState, useEffect } from 'react';
// Import d'un composant (export par défaut)
import Button from './components/Button';
// Import de plusieurs composants
import { Header, Footer, Sidebar } from './components/Layout';
Exemples React
Composant simple (export default)
javascript
// components/Button.jsx
export default function Button({ children, onClick }) {
return (
<button onClick={onClick} className="btn">
{children}
</button>
);
}
javascript
// App.jsx
import Button from './components/Button';
function App() {
return <Button onClick={() => alert('Hi!')}>Click me</Button>;
}
Plusieurs composants (exports nommés)
javascript
// components/Layout.jsx
export function Header() {
return <header>Header</header>;
}
export function Footer() {
return <footer>Footer</footer>;
}
export function Sidebar() {
return <aside>Sidebar</aside>;
}
javascript
// App.jsx
import { Header, Footer, Sidebar } from './components/Layout';
function App() {
return (
<>
<Header />
<Sidebar />
<main>Content</main>
<Footer />
</>
);
}
Utilitaires et constantes
javascript
// utils/constants.js
export const API_URL = 'https://api.example.com';
export const MAX_ITEMS = 100;
export const COLORS = {
primary: '#61DAFB',
secondary: '#282c34'
};
javascript
// utils/helpers.js
export const formatDate = (date) => {
return new Date(date).toLocaleDateString('fr-FR');
};
export const truncate = (str, length) => {
return str.length > length
? `${str.slice(0, length)}...`
: str;
};
javascript
// App.jsx
import { API_URL, MAX_ITEMS } from './utils/constants';
import { formatDate, truncate } from './utils/helpers';
Organisation des fichiers
Structure typique d'un projet React :
src/
├── components/
│ ├── Button.jsx
│ ├── Card.jsx
│ └── Layout.jsx
├── pages/
│ ├── Home.jsx
│ └── About.jsx
├── utils/
│ ├── constants.js
│ └── helpers.js
├── hooks/
│ └── useLocalStorage.js
└── App.jsx
Bonnes pratiques
- Un composant = un fichier (généralement)
- Utilisez des exports nommés pour plusieurs utilitaires
- Utilisez des exports par défaut pour les composants principaux
- Regroupez les utilitaires liés dans le même fichier
- Créez des dossiers thématiques (
components/,utils/, etc.)
Import CSS et assets
javascript
// Import CSS
import './styles.css';
import './Button.module.css';
// Import d'images
import logo from './assets/logo.png';
function App() {
return <img src={logo} alt="Logo" />;
}
Attention
L'extension .js ou .jsx est optionnelle avec les outils modernes (Vite, Create React App). Vous pouvez écrire :
javascript
import Button from './components/Button'; // ✅ OK
import Button from './components/Button.jsx'; // ✅ OK aussi