diff --git a/CORRECTION_tri_et_bugs.md b/CORRECTION_tri_et_bugs.md new file mode 100644 index 0000000..f4e7226 --- /dev/null +++ b/CORRECTION_tri_et_bugs.md @@ -0,0 +1,98 @@ +# 🔧 Correction — le tri + 2 bugs discrets + +Ton formulaire d'ajout est **bon** (immutabilitĂ© avec `[...jeux, nouveau]`, champs vidĂ©s, `preventDefault`) 👏. Trois choses Ă  rĂ©gler : le **tri**, et deux petits bugs que tu n'as peut-ĂȘtre pas repĂ©rĂ©s. + +--- + +## 🐛 Bug 1 — tu as nommĂ© une variable `console` (Ă  Ă©viter absolument) + +```jsx +const [console, setConsole] = useState(""); +``` + +`console`, c'est **dĂ©jĂ ** un objet de JavaScript (celui de `console.log` !). En crĂ©ant une variable qui s'appelle `console`, tu **l'Ă©crases** dans tout ton composant : si un jour tu Ă©cris `console.log(...)` dans `App`, tu auras `console.log is not a function` (car `console` vaut maintenant `""`). + +### ✅ Renomme-la +```jsx +const [plateforme, setPlateforme] = useState(""); +``` +
et adapte partout oĂč tu l'utilises (`value={plateforme}`, `setPlateforme(...)`, et `console: plateforme` dans l'objet `nouveau`). + +> 💡 **À retenir :** Ă©vite de nommer tes variables comme des mots **dĂ©jĂ  pris** par JavaScript : `console`, `document`, `window`, `event`
 Tu risques d'Ă©craser un outil du langage sans t'en rendre compte. + +--- + +## 🐛 Bug 2 — `BarreRecherche` ne reçoit pas la bonne prop + +Ton composant attend une prop **`valeur`** : +```jsx +function BarreRecherche({ valeur, onChange }) { ... value={valeur} ... } +``` +Mais dans `App` tu lui passes **`value`** : +```jsx + // ❌ "value", pas "valeur" +``` +Du coup, Ă  l'intĂ©rieur, `valeur` est `undefined` → le champ n'est plus **contrĂŽlĂ©** par ton Ă©tat. + +### ✅ Mets le mĂȘme nom des deux cĂŽtĂ©s +```jsx + setRecherche(e.target.value)} /> +``` + +> đŸ§© **À retenir :** une prop, c'est comme une Ă©tiquette : le nom que tu mets dans `App` (`valeur=`) doit ĂȘtre **exactement** celui que le composant lit (`{ valeur }`). Sinon, le composant reçoit `undefined`. + +--- + +## 🔀 Le tri (Module J) — comment le faire marcher + +Pour trier, il te faut **trois** choses, et bien les **enchaĂźner** : filtrer → trier → afficher. + +### Étape 1 — un Ă©tat pour le critĂšre de tri +```jsx +const [tri, setTri] = useState("titre"); +``` + +### Étape 2 — un ` setTri(e.target.value)}> + + + +``` + +### Étape 3 — filtrer PUIS trier, sur la mĂȘme liste +```jsx +const affiches = [...jeux] + .filter((j) => j.titre.toLowerCase().includes(recherche.toLowerCase())) + .sort((a, b) => { + if (tri === "titre") return a.titre.localeCompare(b.titre); + if (tri === "annee") return a.annee - b.annee; + return 0; + }); +``` + +### Étape 4 — afficher **`affiches`** (et non `filtres`) +```jsx +{affiches.length === 0 &&

Aucun jeu trouvĂ© 😕

} +{affiches.map((jeu) => ( + setTotal((t) => t + 1)} /> +))} +``` +Tu peux **supprimer** l'ancien `const filtres = ...` : `affiches` fait dĂ©jĂ  le filtre **et** le tri. + +> 🧠 **Le piĂšge classique du tri** (Guillaume est tombĂ© dedans aussi !) : on calcule une liste triĂ©e mais on **affiche l'autre**. La rĂšgle : **on affiche la liste qu'on a vraiment transformĂ©e.** Ici, `affiches` fait filtre + tri, donc on `.map()` `affiches`. + +> 🔎 Le tri **n'a rien Ă  faire « dans le formulaire »** : le `` → l'ordre des cartes change ; combinĂ© avec la recherche, les deux marchent ensemble. + +--- + +## ✅ RĂ©cap +- [ ] Renommer l'Ă©tat `console` → `plateforme` (mot rĂ©servĂ© !) +- [ ] `BarreRecherche` : passer `valeur=` (pas `value=`) +- [ ] Tri : Ă©tat `tri` + `