import { useState, useRef, useEffect } from 'react'; export function LazyChart() { const ref = useRef<HTMLDivElement>(null); const [visible, setVisible] = useState(false); // TODO: // 1) useEffect 안에서 IntersectionObserver 생성 // 2) observer.observe(ref.current) — 뷰포트 진입 감지 // 3) entry.isIntersecting 이 true이면 setVisible(true) + observer.disconnect() // 4) cleanup으로 observer.disconnect() // TODO: visible 이면 Chart를 lazy import + Suspense fallback으로 감싸 렌더, // 아니면 placeholder만 렌더. return ( <div ref={ref} data-testid="lazychart" style={{ minHeight: 200 }}> <p>placeholder</p> </div> ); }
Tests