📝 Exercices — R11 Performance React

10 exercices sur les techniques d'optimisation React.

EX 1

React.memo + useCallback

Créez un composant Parent avec deux boutons (BoutonAction) enveloppés dans React.memo. Utilisez useCallback pour les handlers afin que les boutons ne se re-rendent pas quand un état non lié change.

EX 2

useMemo — calcul coûteux

Créez FibCalculateur avec un slider pour N et un bouton "Re-render". Le calcul de Fibonacci doit utiliser useMemo pour n'être recalculé que quand N change — pas quand le bouton re-render est cliqué.

EX 3

Code splitting — React.lazy + Suspense

Utilisez React.lazy(() => import('./Page')) pour charger des composants à la demande. Enveloppez-les dans <Suspense fallback={...}>. Le composant lazy n'est chargé qu'au moment où il est affiché.

EX 4

Lazy loading d'images

Créez un composant LazyImage qui n'affiche l'image que quand elle entre dans le viewport, en utilisant IntersectionObserver. Alternative : utiliser l'attribut natif loading="lazy".

EX 5

React.Profiler — mesurer les renders

Enveloppez un composant dans <Profiler id="..." onRender={callback}>. La fonction onRender reçoit id, phase, actualDuration, baseDuration. Logguez ces valeurs dans la console.

EX 6

Styles inline stables

Démontrez le problème des styles inline (style={{ color: 'red' }} crée un nouvel objet à chaque render). Montrez la solution : définir le style hors du composant comme constante, ou utiliser useMemo si le style est dynamique.

EX 7

Clés stables dans les listes

Créez une liste d'items avec des clés stables (id unique, pas l'index). Enveloppez chaque item dans React.memo. Testez l'ajout/suppression — seuls les items modifiés doivent se re-rendre.

EX 8

Virtualisation de liste

Implémentez une liste virtualisée : pour 10 000 items, n'affichez que ceux visibles dans le viewport. Utilisez scrollTop, itemHeight et slice pour calculer quels items afficher.

EX 9

Combinaison des optimisations

Créez une liste filtrée optimisée combinant : useReducer (état), useMemo (filtrage), useCallback (handlers), et React.memo (items). Toutes ces techniques ensemble.

EX 10

Application complète optimisée

Créez une application qui combine toutes les techniques : React.memo, useMemo, useCallback, lazy/Suspense pour les composants lourds, et useReducer pour l'état complexe.

← Cours R11 ▶ Mini-projet : Benchmark → Projet Final