# useClickOutside > Runs a callback on outside click. - Category: DOM - Package: `hookli` (install with `npm i hookli`) - Docs: https://hookli.vercel.app/docs/use-click-outside ## Signature ```ts useClickOutside(ref: RefObject, callback: () => void): void ``` ## Parameters - `ref`: `RefObject` — Ref attached to the element that counts as inside — clicks within it (or its children) never fire the callback. - `callback`: `() => void` — Called on every mousedown outside the ref'd element — even while your UI is closed, so guard inside the callback if needed. ## Usage ```tsx import { useRef, useState } from "react"; import { useClickOutside } from "hookli"; export function Demo() { const menuRef = useRef(null); const [open, setOpen] = useState(false); useClickOutside(menuRef, () => setOpen(false)); return (
{open && (
  • Rename
  • Duplicate
)}
); } ``` ## Source `src/hooks/useClickOutside.hook.ts` ```ts import { Ref, useEffect } from "react"; type ClickOutsideCallback = () => void; export const useClickOutside = ( ref: Ref, callback: ClickOutsideCallback, ) => { useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( ref && "current" in ref && !ref.current?.contains(event.target as Node) ) { callback(); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, [ref, callback]); }; ```