React Dojo

Search

Search concepts, exercises and quizzes

dom

useClickOutside

Calls a callback when the user clicks outside a referenced element. Great for closing dropdowns, modals, and popovers.


useClickOutside.ts
import { useEffect, useRef } from "react"

export function useClickOutside<T extends HTMLElement>(
  callback: () => void
) {
  const ref = useRef<T>(null)

  useEffect(() => {
    function handleClick(event: MouseEvent) {
      if (ref.current && !ref.current.contains(event.target as Node)) {
        callback()
      }
    }

    document.addEventListener("mousedown", handleClick)
    return () => document.removeEventListener("mousedown", handleClick)
  }, [callback])

  return ref
}
Was this helpful?
Sign in to give feedback