はじめに
この実験では、ウィンドウがリサイズされるたびにコールバックを実行する useOnWindowResize と呼ばれるカスタム React Hook を作成する方法を学びます。useRef() と useEffect() フックを使用して、Window グローバルオブジェクトの 'resize' イベントをリッスンし、コンポーネントがアンマウントされたときにクリーンアップします。このフックは、さまざまな画面サイズに対応する必要がある応答型の Web アプリケーションを作成する際に役立ちます。
React useOnWindowResize フック
VM には既に
index.htmlとscript.jsが用意されています。一般的には、script.jsとstyle.cssにのみコードを追加すればよいです。
このコードは、ウィンドウがリサイズされるたびにコールバック関数を実行します。それを実装するには、次の手順に従ってください。
useRef()フックを使用してlistenerと呼ばれる変数を作成します。この変数は、リスナーへの参照を格納します。useEffect()フックとEventTarget.addEventListener()を使用して、Windowグローバルオブジェクトの'resize'イベントをリッスンします。イベントがトリガーされたときに、callback関数を呼び出します。- コンポーネントがアンマウントされたときに、
EventTarget.removeEventListener()を使用して既存のリスナーを削除することでクリーンアップします。
以下がコードです。
const useOnWindowResize = (callback) => {
const listener = React.useRef(null);
React.useEffect(() => {
if (listener.current) {
window.removeEventListener("resize", listener.current);
}
listener.current = callback;
window.addEventListener("resize", callback);
return () => {
window.removeEventListener("resize", callback);
};
}, [callback]);
};
const App = () => {
useOnWindowResize(() =>
console.log(`Window size: (${window.innerWidth}, ${window.innerHeight})`)
);
return <p>Resize the window and check the console.</p>;
};
ReactDOM.createRoot(document.getElementById("root")).render(<App />);
右下隅の「Go Live」をクリックして、ポート 8080 でウェブサービスを実行してください。その後、Web 8080 タブを更新してウェブページをプレビューできます。
まとめ
おめでとうございます!あなたは React useOnWindowResize フックの実験を完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習してください。