ホームページ >ウェブフロントエンド >jsチュートリアル >外側のクリックまたはスクロールでモーダルまたはドロップダウンを閉じます。
モーダルまたはドロップダウンを作成し、ユーザーがその外側をクリックしたときにそれを閉じる方法を理解するのに苦労したことがありますか?はい。
これに対処できるクールな反応フックを紹介します
import { useEffect, useRef } from "react"; const useOutsideClickOrScroll = <T extends HTMLElement>( callback: () => void ) => { const ref = useRef<T>(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if (ref.current && !ref.current.contains(event.target as Node)) { callback(); } }; const handleScroll = () => { callback(); }; document.addEventListener("mousedown", handleClickOutside); window.addEventListener("scroll", handleScroll, true); return () => { document.removeEventListener("mousedown", handleClickOutside); window.removeEventListener("scroll", handleScroll, true); }; }, [callback]); return ref; }; export default useOutsideClickOrScroll;
このフックは useRef を使用して DOM 要素をターゲットにし、外側のクリックまたはスクロール イベントでコールバックをトリガーし、useEffect による適切なクリーンアップを保証します。任意の DOM 要素に簡単に添付できるように ref を返します。
使用例は次のとおりです
import React, { useState } from "react"; import useOutsideClickOrScroll from "./useOutsideClickOrScroll"; const Dropdown = () => { const [isOpen, setIsOpen] = useState(false); const handleClose = () => { setIsOpen(false); }; const ref = useOutsideClickOrScroll<HTMLDivElement>(handleClose); return ( <div> <button onClick={() => setIsOpen(!isOpen)}>Toggle Dropdown</button> {isOpen && ( <div ref={ref}> <p>Dropdown Content</p> </div> )} </div> ); }; export default Dropdown;
以上が外側のクリックまたはスクロールでモーダルまたはドロップダウンを閉じます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。