React の useClickInside フック

ReactReactBeginner
今すぐ練習

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

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

はじめに

この実験では、useClickInside と呼ばれるカスタム React フックを作成する方法を学びます。このフックは、ラップされたコンポーネント内でのクリックイベントを処理し、コールバック関数をトリガーします。useEffect()useRef() フックを使用して、click イベントを追加およびクリーンアップします。この実験が終了するとき、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/FundamentalsGroup -.-> react/event_handling("Handling Events") react/AdvancedConceptsGroup -.-> react/hooks("React Hooks") react/StylingGroup -.-> react/css_in_react("CSS in React") subgraph Lab Skills react/jsx -.-> lab-38372{{"React の useClickInside フック"}} react/event_handling -.-> lab-38372{{"React の useClickInside フック"}} react/hooks -.-> lab-38372{{"React の useClickInside フック"}} react/css_in_react -.-> lab-38372{{"React の useClickInside フック"}} end

React useClickInside フック

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

コンポーネント内のクリックイベントを処理するには、refcallback を受け取る useClickInside と呼ばれるカスタムフックを作成します。useEffect() フックを使用して click イベントを追加およびクリーンアップし、useRef() フックを使用してクリックコンポーネント用の ref を作成し、それを useClickInside フックに渡します。以下がコードです。

const useClickInside = (ref, callback) => {
  const handleClick = (e) => {
    if (ref.current && ref.current.contains(e.target)) {
      callback();
    }
  };

  React.useEffect(() => {
    document.addEventListener("click", handleClick);
    return () => {
      document.removeEventListener("click", handleClick);
    };
  }, [ref, callback]);
};

このフックをコンポーネントで使用するには、次のようにします。

const ClickBox = ({ onClickInside }) => {
  const clickRef = React.useRef();
  useClickInside(clickRef, onClickInside);

  return (
    <div
      className="click-box"
      ref={clickRef}
      style={{
        border: "2px dashed orangered",
        height: 200,
        width: 400,
        display: "flex",
        justifyContent: "center",
        alignItems: "center"
      }}
    >
      <p>Click inside this element</p>
    </div>
  );
};

ReactDOM.createRoot(document.getElementById("root")).render(
  <ClickBox onClickInside={() => alert("click inside")} />
);

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

まとめ

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