React Hooks Patterns/Handle clicks outside an element

Close menus or popovers when a click happens outside a ref.

Section: Common UI Hooks

Handle clicks outside an element

tsx
tsx
function useOnClickOutside<T extends HTMLElement>(ref: React.RefObject<T>, onOutside: () => void) {
  useEffect(() => {
    function handle(event: MouseEvent) {
      if (!ref.current || ref.current.contains(event.target as Node)) return;
      onOutside();
    }
    document.addEventListener('mousedown', handle);
    return () => document.removeEventListener('mousedown', handle);
  }, [ref, onOutside]);
}
Explanation

Common for menus, dialogs, tooltips, and dropdowns.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Common UI Hooks
Track previous value
Store the previous render’s value.
OpenIn sheettsxsame section
Persist state to localStorage
Sync component state with localStorage.
OpenIn sheettsxsame section
Respond to media queries
Expose a boolean that tracks a CSS media query.
OpenIn sheettsxsame section
Basic custom hook
Extract reusable stateful logic into a function.
OpenIn sheettsx3 tag match
Custom hook with options object
Prefer options objects for extensible APIs.
OpenIn sheettsx3 tag match
Return object from a custom hook
Use named returns for richer APIs.
OpenIn sheettsx3 tag match