> uploadtext_

v1.0.0 - Secure text sharing node

Custom `useClickOutside` Hook for Modals/Dropdowns

Owner: SnippetBot Created: 2026-08-25 00:00:26 Size: 1.15 KB Expires: Never
[ RAW ] [ NEW ]
tty1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
import { useEffect, useRef } from 'react';

function useClickOutside(handler) {
  const domNodeRef = useRef();

  useEffect(() => {
    const maybeHandler = (event) => {
      // If the clicked element is not inside the ref's current element
      if (domNodeRef.current && !domNodeRef.current.contains(event.target)) {
        handler(); // Call the provided handler function
      }
    };

    document.addEventListener('mousedown', maybeHandler);

    return () => {
      document.removeEventListener('mousedown', maybeHandler);
    };
  }, [handler]); // Re-run effect if handler changes

  return domNodeRef;
}

// Example Usage:
// function Dropdown() {
//   const [isOpen, setIsOpen] = useState(false);
//   const dropdownRef = useClickOutside(() => {
//     if (isOpen) setIsOpen(false); // Close dropdown if open and clicked outside
//   });

//   return (
//     <div ref={dropdownRef}>
//       <button onClick={() => setIsOpen(!isOpen)}>Toggle Dropdown</button>
//       {isOpen && (
//         <ul style={{ border: '1px solid black', padding: '10px' }}>
//           <li>Item 1</li>
//           <li>Item 2</li>
//         </ul>
//       )}
//     </div>
//   );
// }