React useClickOutside フック
VM には既に index.html
と script.js
が用意されています。一般的には、script.js
と style.css
にのみコードを追加する必要があります。
このコードは、ラップされたコンポーネントの外でのクリックイベントを処理します。ref
と callback
を受け取って click
イベントを処理するカスタムフックを作成することで機能します。useEffect()
フックは click
イベントを追加およびクリーンアップするために使用され、useRef()
フックはクリックコンポーネント用の ref
を作成して useClickOutside
フックに渡します。
const useClickOutside = (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);
};
});
};
const ClickBox = ({ onClickOutside }) => {
const clickRef = React.useRef();
useClickOutside(clickRef, onClickOutside);
return (
<div
className="click-box"
ref={clickRef}
style={{
border: "2px dashed orangered",
height: 200,
width: 400,
display: "flex",
justifyContent: "center",
alignItems: "center"
}}
>
<p>Click out of this element</p>
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(
<ClickBox onClickOutside={() => alert("click outside")} />
);
右下隅の「Go Live」をクリックして、ポート 8080 でウェブサービスを実行してください。その後、Web 8080 タブを更新してウェブページをプレビューできます。