React の useHover フック

Beginner

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

はじめに

この実験では、React で useHover と呼ばれるカスタムフックの実装を検討します。このフックは、ラップされたコンポーネントにマウスオーバーするイベントを処理し、それに応じて状態を更新します。この実験が終了するとき、React でカスタムフックを作成して使用してコンポーネントの機能を強化する方法をより深く理解するようになります。

React useHover フック

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

このコードは、ラップされたコンポーネントにマウスオーバーするイベントを処理するカスタムフックを作成します。

このフックを使用するには:

  • useState()を使用して、マウスオーバー状態を保持する変数を作成します。
  • useCallback()を使用して、状態を更新する 2 つのハンドラ関数をメモ化します。
  • useCallback()を使用して、コールバックリフを作成し、'mouseover''mouseout'イベントのリスナーを作成または更新します。
  • useRef()を使用して、最後にcallbackRefに渡されたノードを追跡し、そのリスナーを削除できるようにします。
const useHover = () => {
  const [isHovering, setIsHovering] = React.useState(false);
  const handleMouseOver = React.useCallback(() => setIsHovering(true), []);
  const handleMouseOut = React.useCallback(() => setIsHovering(false), []);
  const nodeRef = React.useRef();
  const callbackRef = React.useCallback(
    (node) => {
      if (nodeRef.current) {
        nodeRef.current.removeEventListener("mouseover", handleMouseOver);
        nodeRef.current.removeEventListener("mouseout", handleMouseOut);
      }
      nodeRef.current = node;
      if (nodeRef.current) {
        nodeRef.current.addEventListener("mouseover", handleMouseOver);
        nodeRef.current.addEventListener("mouseout", handleMouseOut);
      }
    },
    [handleMouseOver, handleMouseOut]
  );

  return [callbackRef, isHovering];
};

これは、このフックの使用例です:

const MyApp = () => {
  const [hoverRef, isHovering] = useHover();
  return <div ref={hoverRef}>{isHovering ? "Hovering" : "Not hovering"}</div>;
};

ReactDOM.createRoot(document.getElementById("root")).render(<MyApp />);

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

まとめ

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