Skip to content

Instantly share code, notes, and snippets.

@lahin31
Last active September 23, 2022 19:38
Show Gist options
  • Save lahin31/32013aefaab11819b708cfaf933c9c1b to your computer and use it in GitHub Desktop.
Save lahin31/32013aefaab11819b708cfaf933c9c1b to your computer and use it in GitHub Desktop.
// useClickOutside.js
import { useEffect, useRef } from "react";
function useClickOutside(elRef, callback) {
const callbackRef = useRef();
callbackRef.current = callback;
useEffect(() => {
const handleClickOutside = (e) => {
if (!elRef?.current?.contains(e.target) && callbackRef.current) {
callbackRef.current(e);
}
};
document.addEventListener("mousedown", handleClickOutside);
return () => {
document.removeEventListener("mousedown", handleClickOutside);
};
}, [callbackRef, elRef]);
}
export default useClickOutside;
// Drawer.js
const sideDrawer = useRef(null);
const onClickOutside = () => {
setShowDrawer(false);
};
useClickOutside(sideDrawer, onClickOutside);
<div ref={sideDrawer} className={showDrawer ? "side-drawer open" : "side-drawer"} />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment