Haben Sie jemals ein modales oder Dropdown-Menü erstellt und hatten Schwierigkeiten, herauszufinden, wie es geschlossen werden kann, wenn der Benutzer außerhalb davon klickt? Ja...
Hier ist ein cooler Reaktionshaken für dich, der damit umgehen kann
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;
Dieser Hook verwendet useRef, um auf ein DOM-Element abzuzielen, und löst einen Rückruf bei externen Klicks oder Scroll-Ereignissen aus, um eine ordnungsgemäße Bereinigung mit useEffect sicherzustellen. Es gibt die Referenz zum einfachen Anhängen an jedes DOM-Element zurück.
Hier ist eine Beispielverwendung
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;
Das obige ist der detaillierte Inhalt vonSchließende Modalitäten oder Dropdown-Menüs zum Klicken oder Scrollen von außen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!