HooksForUI
Useonclickoutside

UseOnClickOutside

This useOnClickOutSide Hook is used for handling the outside of the RefObject.

UseOnClickOutside

useOnClickOutSide.ts
import { RefObject, useEffect } from 'react'
 
const useOnClickOutside = (ref: RefObject<HTMLDivElement | HTMLUListElement>, handler: Function) => {
  useEffect(() => {
    const listener = (event: any) => {
      // Do nothing if clicking ref's element or descendaent elements
      if (!ref.current || ref.current.contains(event.targe)) {
        return
      }
      handler()
    }
    document.addEventListener('mousedown', listener)
    document.addEventListener('touchstart', listener)
    return () => {
      document.removeEventListener('mousedown', listener)
      document.removeEventListener('touchstart', listener)
    }
  }, [ref, handler])
}
 
export default useOnClickOutside

Usage

searchResult.tsx
const resultsContainer = useRef<HTMLDivElement>(null)
useOnClickOutside(resultsContainer, () => setShowSearchResults(false))
Last updated on April 15, 2023