Dans les termes du Skill
Skill GSAP officiel pour l'animation dans React et les frameworks basés sur React comme Next.js. Il privilégie le hook useGSAP() de @gsap/react plutôt que useEffect() ou useLayoutEffect(), enregistré avec gsap.registerPlugin, et exige un scope pour que des sélecteurs comme .box ne correspondent qu'aux éléments à l'intérieur du composant.
Il couvre les refs comme cibles, le second argument optionnel du hook (un tableau de dépendances ou un objet de configuration dependencies/scope/revertOnUpdate), contextSafe pour les animations créées dans des gestionnaires de pointeur après l'exécution du hook, et le repli gsap.context() plus ctx.revert() pour un useEffect classique. Il énonce aussi la règle SSR : GSAP s'exécute dans le navigateur, donc rien ne doit s'exécuter pendant le rendu côté serveur.
Ce qu'il produit
- Un bloc useGSAP dont les animations et ScrollTriggers se réinitialisent automatiquement au démontage
- Un corps de useEffect qui retourne un nettoyage appelant ctx.revert()
- Un gestionnaire de clic enveloppé dans contextSafe dont l'écouteur d'événement est retiré dans le nettoyage retourné
- Exécution côté client uniquement, avec import dynamique dans useEffect comme option pour le tree-shaking ou la taille du bundle
Fonctionnement
- 01Installer Gsap et @gsap/react
Deux paquets sont listés dans le bloc d'installation : la bibliothèque GSAP, puis le paquet GSAP React qui fournit le hook.
- 02Enregistrer useGSAP avant tout code GSAP
Le hook est enregistré comme plugin, et le fichier indique que cet enregistrement doit se faire avant d'exécuter useGSAP ou tout autre code GSAP.
- 03Écrire l'animation à l'intérieur de useGSAP avec un scope
Les sélecteurs sont limités à la racine du composant en passant une ref ou un élément comme scope.
- 04Envelopper les callbacks post-rendu dans contextSafe
Les animations créées plus tard, par exemple dans des gestionnaires d'événements de pointeur, se situent hors du contexte, elles sont donc enveloppées avec contextSafe issu de la valeur de retour du hook.
- 05Se replier sur gsap.context() plus ctx.revert()
Lorsque useGSAP n'est pas une option, le même schéma s'exécute dans useEffect, avec un nettoyage qui appelle toujours ctx.revert().
- 06Garder tout le code GSAP côté client
useGSAP ou useEffect est ce qui empêche l'exécution pendant le rendu serveur ; l'import dynamique dans useEffect est proposé comme option lorsque la taille du bundle importe.