(null);
const [run, setRun] = useState(false);
useEffect(() => {
const el = ref.current;
if (!el) return;
if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return setRun(true);
const io = new IntersectionObserver(([e]) => { if (e.isIntersecting) { setRun(true); io.disconnect(); } }, { threshold: 0.4 });
io.observe(el);
return () => io.disconnect();
}, []);
return (
{stats.map((s, si) => {
const chars = Array.from(s.value);
return (
- {s.label}
-
{s.value}
{chars.map((c, i) => (
))}
);
})}
);
}