스킬 자체의 표현으로
Next.js와 같은 React 기반 프레임워크와 React에서 애니메이션을 위한 공식 GSAP 스킬입니다. 이 스킬은 useEffect() 또는 useLayoutEffect() 대신 @gsap/react의 useGSAP() 훅을 사용하도록 유도하며, gsap.registerPlugin으로 등록되고, .box와 같은 셀렉터가 컴포넌트 내부의 요소에만 매치되도록 scope를 요구합니다.
이 문서는 타깃으로서의 ref, 훅의 선택적 두 번째 인자(의존성 배열 또는 dependencies/scope/revertOnUpdate 설정 객체), 훅 실행 이후 포인터 핸들러에서 생성되는 애니메이션을 위한 contextSafe, 그리고 일반 useEffect에 대한 gsap.context()와 ctx.revert() 대체 방식을 다룹니다. 또한 SSR 규칙도 명시합니다: GSAP는 브라우저에서 실행되므로 서버 렌더링 중에는 어떤 것도 실행되어서는 안 됩니다.
산출물
- 애니메이션과 ScrollTrigger가 언마운트 시 자동으로 되돌려지는 useGSAP 블록
- ctx.revert()를 호출하는 클린업을 반환하는 useEffect 본문
- 반환된 클린업에서 이벤트 리스너가 제거되는, contextSafe로 감싼 클릭 핸들러
- 클라이언트에서만 실행되도록 하며, 트리 셰이킹이나 번들 크기를 위해 useEffect 내부에서 동적 import를 옵션으로 사용
작동 방식
- 01Gsap과 @gsap/react 설치
설치 블록에는 두 개의 패키지가 나열되어 있습니다: GSAP 라이브러리, 그리고 훅을 제공하는 GSAP React 패키지입니다.
- 02모든 GSAP 코드 전에 useGSAP 등록
이 훅은 플러그인으로 등록되며, 문서에 따르면 이 등록은 useGSAP나 다른 GSAP 코드를 실행하기 전에 이루어져야 합니다.
- 03useGSAP 안에서 scope와 함께 애니메이션 작성
ref나 요소를 scope로 전달하여 셀렉터를 컴포넌트 루트로 제한합니다.
- 04렌더링 이후 콜백을 contextSafe로 감싸기
이후에 생성되는 애니메이션, 예를 들어 포인터 이벤트 핸들러 안에서 생성되는 애니메이션은 context 밖에 있으므로, 훅의 반환값에서 가져온 contextSafe로 감쌉니다.
- 05gsap.context()와 ctx.revert()로 대체하기
useGSAP을 사용할 수 없는 경우, 동일한 패턴이 useEffect 내부에서 실행되며, 클린업은 항상 ctx.revert()를 호출합니다.
- 06모든 GSAP 코드를 클라이언트에 유지
useGSAP 또는 useEffect가 서버 렌더링에서 실행을 배제하는 역할을 하며, 번들 크기가 중요한 경우 useEffect 내부의 동적 import가 옵션으로 제공됩니다.