useRef Hookの主な利用方法はDOMの参照
useRef Hookを使用して、DOM要素への参照を保持することができます。 これにより、特定のDOM要素に対して直接操作を行うことができます。
Intersection Observer の例
Intersection Observer APIは、特定の要素がビューポート内に表示されたかどうかを監視するために使用されます。 これにより、ページのスクロールやリサイズに応じて、要素の表示状態を効率的に追跡できます。
例:スクロールすると、activeクラスが追加されます。
サンプルコード 01
export default function UseRef() {
const refs = useRef<(HTMLSpanElement | null)[]>([]);
useEffect(() => {
// IntersectionObserverを作成
// オブザーバーは、オブジェクトの交差を監視するために使用されます。
const observer = new IntersectionObserver(
(entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add(styles.active);
} else {
entry.target.classList.remove(styles.active);
}
});
},
{ threshold: 0.3 }
);
// 各refをオブザーバーに登録
refs.current.forEach((el) => {
if (el) observer.observe(el);
});
// オブザーバーをクリーンアップ
return () => {
refs.current.forEach((el) => {
if (el) observer.unobserve(el);
});
};
}, []);
return (
<div>
<p>
<span ref={(el) => { refs.current[0] = el; }} className={styles.strong}>
この要素が表示されると active クラスが追加されます
</span>
</p>
<p>
<span ref={(el) => { refs.current[1] = el; }} className={styles.strong}>
この要素が表示されると active クラスが追加されます
</span>
</p>
</div>
);
}
スクロールしてください
この要素が表示されると active クラスが追加されます
スクロールしてください
この要素が表示されると active クラスが追加されます