UseLayoutEffect
La notion de useLayoutEffect dans React est un peu avancée mais je vais te l'expliquer de manière simple et claire.
Qu'est-ce que useLayoutEffect ?
useLayoutEffect est un Hooks (React) fourni par React qui est très similaire à useEffect, mais il y a une différence clé dans leur exécution.
useEffect: Ce hook est exécuté après que le navigateur ait render (React) (c'est-à-dire après que le rendu soit visible à l'utilisateur). Les effets dans ce hook ne bloquent pas la mise à jour du DOM (Document Object Model) visible par l'utilisateur.useLayoutEffect: Ce hook est exécuté après que le DOM soit mis à jour mais avant que le navigateur ne peigne. Il est donc exécuté de manière synchrone après les mutations du DOM mais avant le rendu. Cela signifie que les effets dans ce hook peuvent bloquer la mise à jour visible du DOM jusqu'à ce qu'ils soient terminés.
Quand utiliser useLayoutEffect ?
Utilise useLayoutEffect lorsque tu as besoin de lire ou de modifier le DOM après que React a effectué toutes les modifications mais avant que le navigateur ne rende les mises à jour. Par exemple, pour mesurer la taille ou la position d'un élément et faire des ajustements en conséquence.
Exemple de Code en TypeScript
Voici un exemple pratique en TypeScript pour illustrer l'utilisation de useLayoutEffect.
import React, { useState, useLayoutEffect, useRef } from 'react';
const LayoutEffectExample: React.FC = () => {
const [height, setHeight] = useState(0);
const divRef = useRef<HTMLDivElement>(null);
useLayoutEffect(() => {
if (divRef.current) {
// Mesure la hauteur de l'élément div
const divHeight = divRef.current.getBoundingClientRect().height;
setHeight(divHeight);
}
}, [height]); // Dépendance sur 'height' pour illustrer le recalcul
return (
<div>
<div ref={divRef} style={{ border: '1px solid black', padding: '20px' }}>
Cette div a une hauteur dynamique.
</div>
<p>Hauteur mesurée: {height}px</p>
</div>
);
};
export default LayoutEffectExample;
Explication du Code
- Import des modules nécessaires : On importe
useState,useLayoutEffect,useRefde React. - Création d'un composant fonctionnel :
LayoutEffectExampleest notre composant fonctionnel. - state (React) pour stocker la hauteur : On utilise useState pour stocker la hauteur de la div.
- Référence à l'élément div : useRef est utilisé pour créer une référence à l'élément div.
useLayoutEffectpour mesurer la hauteur : Dans le hookuseLayoutEffect, on accède à la hauteur de la div et on met à jour le stateheightavec cette valeur.- Rendu du composant : Le JSX retourne une div avec un style, et on affiche la hauteur mesurée dans un paragraphe.
Pourquoi utiliser useLayoutEffect ici ?
Dans cet exemple, useLayoutEffect assure que nous mesurons la hauteur de la div après que le DOM ait été mis à jour mais avant que le navigateur ne rende ces mises à jour à l'écran. Cela garantit que notre mesure est exacte et que tout ajustement nécessaire est fait avant que l'utilisateur ne voie la mise à jour.
Conclusion
useLayoutEffect est très utile pour des situations où tu dois interagir avec le DOM après les mises à jour mais avant le rendu. Utilise-le avec précaution, car il peut avoir un impact sur les performances si mal utilisé, étant donné qu'il bloque le rendu jusqu'à ce que les opérations soient terminées.
Si tu souhaites approfondir tes connaissances sur useLayoutEffect et explorer d'autres notions avancées en React et en TypeScript, voici une liste de sujets que tu peux étudier :
-
useEffect vs. useLayoutEffect :
- Différences et cas d'utilisation spécifiques.
- Exemples pratiques pour bien comprendre quand utiliser chaque hook.
-
Hooks personnalisés :
- Créer et utiliser des hooks personnalisés pour réutiliser la logique dans tes composants.
-
React Contexts API (React) :
- Partager des données à travers l’arborescence des composants sans avoir à passer explicitement des props.
-
Redux et autres gestionnaires d'état :
- Comprendre et implémenter Redux pour la gestion d'état global.
- Explorer d'autres solutions comme MobX ou Zustand.
-
Concurrent Mode :
- Introduction au mode concurrent de React pour améliorer les performances et l'expérience utilisateur.
-
React-Suspense et React.lazy :
- Charger des composants de manière asynchrone pour optimiser le temps de chargement.
-
- Rendre des enfants dans un sous-arbre DOM différent de leur parent.
-
Code Splitting et lazy loading :
- Diviser ton code en morceaux plus petits et charger ceux-ci de manière asynchrone pour améliorer les performances.
-
- Navigation dynamique et gestion des routes dans une application React.
