React の useOnWindowScroll フック

ReactReactBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、React における useOnWindowScroll フックをどのように使用するかを検討します。このフックを使用することで、ウィンドウがスクロールされるたびにコールバックを実行することができます。このフックを使用することで、Window グローバルオブジェクトにスクロールリスナーを追加し、コンポーネントがアンマウントされたときにそれを削除することができます。このフックを使用することで、React コンポーネントにカスタム スクロール動作を簡単に追加することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL react(("React")) -.-> react/FundamentalsGroup(["Fundamentals"]) react(("React")) -.-> react/AdvancedConceptsGroup(["Advanced Concepts"]) react(("React")) -.-> react/StylingGroup(["Styling"]) react/FundamentalsGroup -.-> react/jsx("JSX") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StylingGroup -.-> react/css_in_react("CSS in React") subgraph Lab Skills react/jsx -.-> lab-38401{{"React の useOnWindowScroll フック"}} react/hooks -.-> lab-38401{{"React の useOnWindowScroll フック"}} react/css_in_react -.-> lab-38401{{"React の useOnWindowScroll フック"}} end

React useOnWindowScroll フック

VM には既に index.htmlscript.js が用意されています。一般的には、script.jsstyle.css にのみコードを追加すればよいです。

この関数は、ウィンドウがスクロールされるたびにコールバック関数を実行します。それを実装するには:

  1. useRef() フックを使用して参照変数 listener を作成します。
  2. useEffect() フックと EventTarget.addEventListener() を使用して、Window オブジェクトの 'scroll' イベントをリッスンし、リスナー参照を listener.current に割り当てます。
  3. コンポーネントがアンマウントされたときに、既存のリスナーを削除するために EventTarget.removeEventListener() を使用します。

以下がコードです:

const useOnWindowScroll = (callback) => {
  const listener = React.useRef(null);

  React.useEffect(() => {
    if (listener.current) {
      window.removeEventListener("scroll", listener.current);
    }
    listener.current = () => {
      callback(window.pageYOffset);
    };
    window.addEventListener("scroll", listener.current);
    return () => {
      window.removeEventListener("scroll", listener.current);
    };
  }, [callback]);
};

この関数をテストするには、次のようにコンポーネントで使用できます:

const App = () => {
  useOnWindowScroll((scrollY) => console.log(`scroll Y: ${scrollY}`));
  return <p style={{ height: "300vh" }}>Scroll and check the console</p>;
};

ReactDOM.render(<App />, document.getElementById("root"));

これにより、ウィンドウがスクロールされるたびに、ウィンドウの垂直方向のスクロール位置がコンソールにログ表示されます。

右下隅の「Go Live」をクリックして、ポート 8080 でウェブ サービスを実行してください。その後、Web 8080 タブを更新して、ウェブ ページをプレビューできます。

まとめ

おめでとうございます!あなたは React useOnWindowScroll フックの実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を練習することができます。