📝 Exercices — R08 Hooks Avancés
10 exercices sur useRef, useMemo, useCallback, React.memo et useReducer.
useRef pour accès DOM
Créez un composant FormAutoFocus avec deux champs (nom et email). Au montage, le champ nom reçoit le focus automatiquement. Un bouton "Focus Email" déplace le focus sur l'email. Utilisez useRef pour accéder aux éléments DOM.
useRef pour valeur persistante
Créez un composant CompteurRendus qui affiche un compteur d'état et le nombre total de rendus du composant. Utilisez useRef pour compter les rendus sans déclencher de re-render supplémentaire.
useMemo — calcul mémoïsé
Créez ListeFiltre qui reçoit un tableau items et permet de filtrer par texte. Utilisez useMemo pour éviter de refiltrer la liste à chaque re-render non lié au filtre. Syntaxe : useMemo(() => calcul, [deps]).
useCallback — fonction mémoïsée
Créez un composant Parent avec un BoutonMemo enfant enveloppé dans React.memo. Utilisez useCallback pour mémoïser le handler passé en prop afin que l'enfant ne se re-rende pas inutilement.
React.memo — éviter les re-renders
Créez un composant CarteStatique qui affiche un titre et une couleur. Enveloppez-le dans React.memo pour qu'il ne se re-rende que si ses props changent. Testez avec un parent qui tick sans changer les props de la carte.
useReducer — compteur avec step
Refactorisez un compteur pour utiliser useReducer. Le reducer gère les actions : increment, decrement, reset et setStep. L'état contient { count, step }.
useMemo + useCallback combinés
Créez ListeAvancee avec des items filtrables par catégorie et supprimables. Utilisez useMemo pour le filtrage et useCallback pour le handler de suppression passé à un composant Item mémoïsé.
useRef pour stocker l'ID du timer
Créez un chronomètre Chronometre avec Start, Stop et Reset. Stockez l'ID de l'intervalle dans une ref (useRef) pour pouvoir l'annuler avec clearInterval ou clearTimeout.
useReducer — state complexe
Gérez un state complexe avec useReducer : { items, filtre, tri, chargement }. Actions : setItems, setFiltre, setTri, loading, deleteItem. Utilisez dispatch({ type, payload }).
Combinaison complète des hooks avancés
Créez BigList combinant useRef (focus input), useReducer (état), useMemo (filtrage de 1000 items), useCallback (handler), et React.memo (composant Row). Démonstration de performances React.