Skip to content

Instantly share code, notes, and snippets.

@azaek
Created August 19, 2022 01:49
Show Gist options
  • Save azaek/a195c905eaea5f9b311ac903cde0f816 to your computer and use it in GitHub Desktop.
Save azaek/a195c905eaea5f9b311ac903cde0f816 to your computer and use it in GitHub Desktop.
useOutsideClick
import { Ref, RefObject, useEffect, useRef } from "react";
const useOutsideClick = (ref: RefObject<HTMLDivElement> , handler: (event : any | null) => void) => {
useEffect(
() => {
const listener = (event: any) => {
// Do nothing if clicking ref's element or descendent elements
if (!ref || ref.current?.contains(event.target)) {
return;
}
handler(event);
};
document.addEventListener("mousedown", listener);
document.addEventListener("touchstart", listener);
return () => {
document.removeEventListener("mousedown", listener);
document.removeEventListener("touchstart", listener);
}
}, [ref, handler]);
}
export default useOutsideClick;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment