📘 Chapitre 8 – Créer une interface interactive pilotée par état
1. 🎯 Objectif pédagogique
Apprendre à gérer un état (state) en JavaScript pour mettre à jour dynamiquement l’affichage d’une page, en fonction des actions de l’utilisateur.
2. 📚 Concepts abordés
- Notion d’état (données qui définissent l’affichage courant)
- Mise à jour du DOM lorsque l’état change
- Gestion d’un panier ou d’une liste dynamique
- Utilisation d’événements (
click
) pour modifier l’état - Bonnes pratiques pour séparer les données et l’affichage
3. 🧠 Explication théorique
L’état correspond aux données en mémoire qui décrivent ce que l’interface doit afficher. Lorsqu’un utilisateur effectue une action (ajouter/supprimer un produit), l’état est mis à jour, et l’interface est re-rendue.
Exemple simple :
let compteur = 0;
function afficher() {
console.log("Compteur : " + compteur);
}
function incrementer() {
compteur++;
afficher();
}
incrementer(); // Affiche "Compteur : 1"
Ici, compteur
est l’état.
4. 🛠 Tutoriel pratique
Résumé
Nous allons créer un mini-panier d’achats : chaque clic sur un bouton ajoute un produit au panier et met à jour l’affichage.
Arborescence du projet
mon_projet/
├── index.html
└── script.js
Étape 1 : Fichier HTML
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Interface pilotée par état</title>
<style>
.produit { margin-bottom: 10px; }
.panier { margin-top: 20px; border-top: 1px solid #ccc; padding-top: 10px; }
</style>
</head>
<body>
<h1>Boutique</h1>
<div class="produit">
<span>PC Portable – 900 €</span>
<button data-nom="PC Portable" data-prix="900">Ajouter au panier</button>
</div>
<div class="produit">
<span>Souris – 25 €</span>
<button data-nom="Souris" data-prix="25">Ajouter au panier</button>
</div>
<div class="panier">
<h2>Panier</h2>
<ul id="liste-panier"></ul>
<p id="total">Total : 0 €</p>
</div>
<script src="script.js"></script>
</body>
</html>
Étape 2 : Code JavaScript
let panier = []; // État : tableau des produits
let listePanier = document.getElementById("liste-panier");
let total = document.getElementById("total");
function afficherPanier() {
listePanier.innerHTML = "";
let somme = 0;
panier.forEach(p => {
let li = document.createElement("li");
li.textContent = `${p.nom} – ${p.prix} €`;
listePanier.appendChild(li);
somme += p.prix;
});
total.textContent = `Total : ${somme} €`;
}
let boutons = document.querySelectorAll("button");
boutons.forEach(bouton => {
bouton.addEventListener("click", function() {
let produit = {
nom: this.dataset.nom,
prix: parseFloat(this.dataset.prix)
};
panier.push(produit);
afficherPanier(); // Mettre à jour l'affichage après ajout
});
});
Étape 3 : Test
Ouvre index.html
et clique sur les boutons pour voir les produits ajoutés et le total mis à jour en temps réel.
5. 🧾 Résumé et points-clés
- L’état est la source unique de vérité pour l’affichage.
- Toute modification de l’état doit entraîner une mise à jour du DOM.
- Cette logique prépare aux frameworks modernes (React, Vue, etc.) qui reposent sur la notion de state.