UseClickOutside
guarahooks/use-click-outsideFreeHook
Detects clicks outside of a referenced element.
Live preview
live · rendered by the registry
Rendered by guarahooks on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://guarahooks.com/r/use-click-outside.jsonSource
1'use client';23import { useEffect, useRef } from 'react';45export function useClickOutside<T extends HTMLElement>(6 ref: React.RefObject<T | null>,7 onClickOutside: (event: MouseEvent | TouchEvent) => void,8) {9 const callbackRef = useRef(onClickOutside);10 useEffect(() => {11 callbackRef.current = onClickOutside;12 }, [onClickOutside]);1314 useEffect(() => {15 function handleEvent(event: MouseEvent | TouchEvent) {16 const el = ref.current;17 if (!el || !(event.target instanceof Node) || el.contains(event.target))18 return;19 callbackRef.current(event);20 }2122 document.addEventListener('mousedown', handleEvent, true);23 document.addEventListener('touchstart', handleEvent, true);24 return () => {25 document.removeEventListener('mousedown', handleEvent, true);26 document.removeEventListener('touchstart', handleEvent, true);27 };28 }, []);29}
Files it writes
More from guarahooks
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| UseAbortControlleruse-abort-controller | guarahooks | Hooks | Free | no deps | |
| UseArrayStateuse-array-state | guarahooks | Hooks | Free | no deps | |
| UseAxiosuse-axios | guarahooks | Hooks | Free | no deps | |
| UseBatteryStatususe-battery-status | guarahooks | Hooks | Free | no deps | |
| UseBetterAuthuse-better-auth | guarahooks | Hooks | Free | no deps | |
| UseConfirmuse-confirm | guarahooks | Hooks | Free | no deps | |
| UseCookieuse-cookie | guarahooks | Hooks | Free | no deps | |
| UseCopyToClipboarduse-copy-to-clipboard | guarahooks | Hooks | Free | no deps |
