useClickOutside

React Hook to Detect Clicks Outside an Element

The useClickOutside hook is a simple and effective way to detect clicks outside of a specified element in your React applications. This is particularly useful for closing modals, dropdowns, or tooltips when the user clicks outside of them.

import React, { useState, useRef, useEffect } from 'react';
type Handler = (event: MouseEvent | TouchEvent) => void;
/**
* A custom React hook that triggers a callback when a click occurs outside of the referenced element.
* The hook returns a ref that should be attached to the element to monitor.
*
* @param handler - The function to call when a click outside is detected.
* @returns A React ref object to attach to the element.
*/
function useClickOutside<T extends HTMLElement>(handler: Handler): React.RefObject<T> {
const ref = useRef<T>(null);
useEffect(() => {
const listener = (event: MouseEvent | TouchEvent) => {
if (!ref.current || ref.current.contains(event.target as Node)) {
return;
}
handler(event);
};
document.addEventListener('mousedown', listener);
document.addEventListener('touchstart', listener);
return () => {
document.removeEventListener('mousedown', listener);
document.removeEventListener('touchstart', listener);
};
}, [handler]);
return ref;
}