📝 Exercices — R08 Hooks Avancés

10 exercices sur useRef, useMemo, useCallback, React.memo et useReducer.

EX 1

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.

EX 2

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.

EX 3

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]).

EX 4

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.

EX 5

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.

EX 6

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 }.

EX 7

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é.

EX 8

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.

EX 9

useReducer — state complexe

Gérez un state complexe avec useReducer : { items, filtre, tri, chargement }. Actions : setItems, setFiltre, setTri, loading, deleteItem. Utilisez dispatch({ type, payload }).

EX 10

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.

← Cours R08 ▶ Mini-projet : Perf Demo Suivant : Custom Hooks →