Skip to content

Instantly share code, notes, and snippets.

@HaNdTriX
Last active January 29, 2019 11:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HaNdTriX/6ef6f62eadfc87767e92e900070f620a to your computer and use it in GitHub Desktop.
Save HaNdTriX/6ef6f62eadfc87767e92e900070f620a to your computer and use it in GitHub Desktop.
import { useEffect } from 'react'
function useClickOutside(ref, onClickOutside) {
useEffect(() => {
const handleClick = (event) => {
if (!ref.current || !ref.current.contains(event.target)) {
onClickOutside(event)
}
}
window.addEventListener('click', handleClick)
return () => window.removeEventListener('click', handleClick)
}, [onClickOutside])
}
export default useClickOutside
@HaNdTriX
Copy link
Author

Usage

import React, { useRef, useCallback } from 'react'
import useClickOutside from './hooks-clickOutside'

function Box() {
  const ref = useRef();
  const handleOutsideClick = useCallback(event => {
    console.log("clicked outside", event);
  });

  useClickOutside(ref, handleOutsideClick);

  return (
    <div
      ref={ref}
      style={{
        width: 200,
        height: 200,
        backgroundColor: "red"
      }}
    >
      Box
    </div>
  );
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment