React
Une bibliothèque JavaScript révolutionnaire pour créer des interfaces utilisateur modernes, rapides et réactives.
Qu'est-ce que React ?
Imaginez que vous souhaitez construire une interface web moderne, comme celle de Facebook, Instagram ou Airbnb. Ces sites sont interactifs, fluides et réagissent instantanément à vos actions.
React est l'outil qui permet aux développeurs de créer ces expériences interactives facilement. Créé par Facebook en 2013, React est aujourd'hui l'une des technologies les plus populaires pour développer des sites et applications web.
Pourquoi React est si spécial ?
Réactivité
Les interfaces React se mettent à jour instantanément lorsque les données changent, sans avoir à recharger la page.
Composants
React permet de découper l'interface en "briques" réutilisables appelées composants, comme un jeu de construction.
En résumé, React permet de créer des sites web qui ressemblent plus à des applications qu'à des pages web traditionnelles. Les utilisateurs bénéficient d'une expérience plus rapide et plus agréable, et les développeurs peuvent travailler plus efficacement.
Fonctionnement technique
React est une bibliothèque JavaScript déclarative qui utilise un concept de DOM virtuel pour optimiser les rendus et minimiser les manipulations directes du DOM.
Les concepts fondamentaux
JSX
JSX est une extension syntaxique de JavaScript qui permet d'écrire des éléments HTML directement dans le code JavaScript. Cela permet de garder ensemble la logique et le rendu d'un composant.
// Ceci est du JSX
const element = <h1>Bonjour, monde!</h1>;
Composants
Les composants sont les briques de base de React. Ils peuvent être définis comme des fonctions (Functional Components) ou des classes (Class Components). Ils acceptent des "props" en entrée et retournent des éléments React.
// Un composant React simple
function Welcome() {
return (
<div className="greeting">
<h1 className="title">Bonjour !</h1>
<p>Bienvenue sur notre application React</p>
</div>
);
}
Props et État (State)
Les props sont des arguments passés aux composants, tandis que l'état est géré à l'intérieur du composant. Les deux déclenchent un nouveau rendu lorsqu'ils changent.
// Un composant avec des props
function UserCard({ name, job, avatar }) {
return (
<div className="user-card">
<img src={avatar} alt={name} />
<h2>{name}</h2>
<p>{job}</p>
</div>
);
}
// Utilisation
<UserCard
name="Sophie Martin"
job="Designer UX"
avatar="/images/sophie.jpg"
/>
Hooks
Introduits dans React 16.8, les Hooks permettent d'utiliser l'état et d'autres fonctionnalités de React sans écrire de classe. Les plus courants sont useState, useEffect, useContext, etc.
// Utilisation du hook useState
import { useState } from 'react';
function Counter() {
// Déclare une variable d'état "count" initialisée à 0
const [count, setCount] = useState(0);
return (
<div>
<p>Vous avez cliqué {count} fois</p>
<button onClick={() => setCount(count + 1)}>
Cliquez ici
</button>
</div>
);
}
Avantages techniques
- Performances optimisées grâce au DOM virtuel qui limite les manipulations coûteuses du DOM réel
- Modèle de composants qui favorise la réutilisation du code et la séparation des préoccupations
- Écosystème riche avec de nombreuses bibliothèques compatibles (Redux, React Router, etc.)
- Rendu côté serveur (SSR) possible pour améliorer les performances et le SEO
- API stable avec une excellente rétrocompatibilité
Exemple avancé
Voici un exemple plus complexe qui montre comment utiliser plusieurs hooks ensemble pour créer un composant qui gère le chargement de données utilisateur avec gestion d'erreurs et d'états de chargement.
// Exemple plus avancé avec plusieurs hooks
import { useState, useEffect, useCallback } from 'react';
// Interface pour typer les données
interface User {
id: number;
name: string;
email: string;
}
function UserProfile({ userId }: { userId: number }) {
// État pour stocker les données utilisateur
const [user, setUser] = useState<User | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
// Fonction mémorisée pour charger les données
const fetchUserData = useCallback(async () => {
try {
setLoading(true);
// Simulation d'un appel API
const response = await fetch(`https://api.example.com/users/${userId}`);
if (!response.ok) {
throw new Error('Erreur lors du chargement des données');
}
const userData = await response.json();
setUser(userData);
setError(null);
} catch (err) {
setError('Impossible de charger les informations utilisateur');
setUser(null);
} finally {
setLoading(false);
}
}, [userId]);
// Effet pour charger les données au montage ou quand userId change
useEffect(() => {
fetchUserData();
}, [userId, fetchUserData]);
// Rendu conditionnel selon l'état
if (loading) {
return <div className="loader">Chargement en cours...</div>;
}
if (error) {
return <div className="error">{error}</div>;
}
return (
<div className="user-profile">
{user ? (
<>
<h2>{user.name}</h2>
<p>Email: {user.email}</p>
<button onClick={fetchUserData}>Actualiser</button>
</>
) : (
<p>Aucune donnée utilisateur trouvée</p>
)}
</div>
);
}
Cas d'usage
Applications web complexes
Parfait pour les applications riches en fonctionnalités comme les tableaux de bord, les outils de gestion ou les plateformes collaboratives.
Applications mobiles hybrides
Avec React Native, le même paradigme peut être utilisé pour créer des applications mobiles natives pour iOS et Android.
Sites web dynamiques
Idéal pour les sites avec beaucoup d'interactions utilisateur comme les e-commerces, les réseaux sociaux ou les portails de contenu.
Interfaces utilisateur personnalisées
Excellent pour créer des composants UI réutilisables, des systèmes de design et des bibliothèques d'interfaces.
Entreprises qui utilisent React
De nombreuses entreprises de premier plan ont adopté React pour leurs produits, notamment: