Tutoriel React — Chapitre 14

useEffect (effets et cycle de vie)

Chapitre 14 — useEffect (effets et cycle de vie)

Une application React “réelle” ressemble rarement à une seule page. Vous aurez souvent plusieurs écrans : Accueil, À propos, Contact, Profil, etc. Le routage (routing) permet de lier une URL à un composant “page”. Dans React, la solution la plus utilisée est React Router .

Objectif : comprendre (pas apprendre par cœur) Niveau : débutant absolu Pratique : mini-exercice à la fin

Plan du chapitre

1) SPA : pourquoi a-t-on besoin d’un router ?

Une application React classique est une SPA (Single Page Application). Cela signifie : le navigateur charge une seule page (souvent index.html), puis React change l’interface sans recharger la page.

Problème : si vous tapez /about dans la barre d’adresse, comment React sait quoi afficher ? C’est précisément le rôle du router.

Le router associe : URL → composant (une “page” React).

2) Installation de React Router

Dans votre projet Vite/React, installez React Router DOM :

npm install react-router-dom

Ensuite, vous l’utiliserez dans votre code avec des imports (ex : BrowserRouter, Routes, Route).

3) Mise en place : BrowserRouter + Routes + Route

L’idée : vous placez un “contexte de navigation” autour de votre application, puis vous déclarez les routes dans <Routes>.

Étape A — Encapsuler l’app dans BrowserRouter (dans src/main.jsx)

import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter } from "react-router-dom";
import App from "./App.jsx";

ReactDOM.createRoot(document.getElementById("root")).render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
);

Étape B — Déclarer les routes (dans src/App.jsx)

import { Routes, Route } from "react-router-dom";
import Home from "./pages/Home.jsx";
import About from "./pages/About.jsx";

export default function App() {
  return (
    <div>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </div>
  );
}

À retenir : path = URL, element = composant à afficher.

4) Créer des “pages” (composants dédiés)

Bonne pratique : créer un dossier src/pages pour les pages. Chaque page est un composant React simple.

Exemple : src/pages/Home.jsx

export default function Home() {
  return (
    <main>
      <h1>Accueil</h1>
      <p>Bienvenue sur mon application.</p>
    </main>
  );
}

Exemple : src/pages/About.jsx

export default function About() {
  return (
    <main>
      <h1>À propos</h1>
      <p>Cette page explique le projet.</p>
    </main>
  );
}

6) Route 404 (page introuvable)

Si l’utilisateur va sur une URL inconnue, vous voulez afficher une page 404. React Router permet de créer une route “catch-all” avec *.

import NotFound from "./pages/NotFound.jsx";

<Routes>
  <Route path="/" element={<Home />} />
  <Route path="/about" element={<About />} />
  <Route path="*" element={<NotFound />} />
</Routes>

7) Paramètres d’URL : /users/:id + useParams

Très courant : une page “détail” avec un identifiant dans l’URL, par exemple : /users/42. On écrit cela avec un paramètre : /users/:id.

A) Déclarer la route

<Route path="/users/:id" element={<UserDetails />} />

B) Lire le paramètre avec useParams

import { useParams } from "react-router-dom";

export default function UserDetails() {
  const { id } = useParams();

  return (
    <main>
      <h1>Utilisateur {id}</h1>
    </main>
  );
}

id est une chaîne (string). Si vous avez besoin d’un nombre, convertissez-le : Number(id).

9) Erreurs fréquentes

Erreur : “useNavigate() may be used only in the context of a <Router>”

Votre composant utilise React Router (Link, useNavigate, useParams…) mais l’app n’est pas enveloppée par <BrowserRouter>. Vérifiez main.jsx.

Je clique sur un lien et la page recharge

Vous utilisez probablement <a href>. Utilisez <Link to>.

J’ai une 404 en rafraîchissant une URL (en production)

En SPA, un refresh sur /about peut être géré par le serveur. Il faut configurer un “fallback” vers index.html (selon l’hébergeur). On détaillera cela dans un chapitre déploiement.

10) Résumé (à retenir)

  • React Router associe URL → composant.
  • On enveloppe l’app dans <BrowserRouter> (souvent dans main.jsx).
  • On déclare les routes avec <Routes> et <Route>.
  • On navigue avec <Link to> (pas <a href>).
  • Routes dynamiques : /users/:id + useParams.
  • Navigation programmée : useNavigate.

11) Exercice pratique (débutant)

Objectif : créer une mini-app avec navigation et une route dynamique.

Étape 1 — Pages

  • Créez Home et About dans src/pages.
  • Ajoutez une page NotFound.

Étape 2 — Routes

  • Configurez BrowserRouter dans main.jsx.
  • Dans App.jsx, ajoutez les routes /, /about, et *.

Étape 3 — Menu

  • Créez un composant Navbar avec des Link vers Accueil et À propos.
  • Affichez le menu au-dessus de <Routes>.

Bonus — Route dynamique

  • Créez une page UserDetails et une route /users/:id.
  • Dans Home, ajoutez un lien vers /users/1 et /users/2.

Prochaine étape : Chapitre 15 — Approfondir le routage (layout, routes imbriquées) et améliorer la structure de navigation.