UseEventListener
guarahooks/use-event-listenerFreeHook
Manages DOM event listeners with proper cleanup.
Install it
npx shadcn@latest add https://guarahooks.com/r/use-event-listener.jsonSource
1'use client';23import { RefObject, useEffect, useRef } from 'react';45// Types6type EventTarget = Window | Document | HTMLElement | null;78interface Props<9 K extends keyof WindowEventMap,10 T extends HTMLElement = HTMLElement,11> {12 eventName: K;13 handler: (event: WindowEventMap[K]) => void;14 element?: RefObject<T | null> | EventTarget;15 options?: boolean | AddEventListenerOptions;16}1718/**19 * React hook for handling DOM event listeners with proper cleanup20 */21export function useEventListener<22 K extends keyof WindowEventMap,23 T extends HTMLElement = HTMLElement,24>({ eventName, handler, element = window, options }: Props<K, T>): void {25 // Create a ref that stores the handler26 const savedHandler = useRef(handler);2728 // Update ref.current value if handler changes29 useEffect(() => {30 savedHandler.current = handler;31 }, [handler]);3233 useEffect(() => {34 // Define the element to attach the listener to35 const targetElement: EventTarget =36 element && 'current' in element ? element.current : element;3738 if (!(targetElement && targetElement.addEventListener)) {39 return;40 }4142 // Create event listener that calls handler function stored in ref43 const eventListener: typeof handler = (event) =>44 savedHandler.current(event);4546 targetElement.addEventListener(47 eventName,48 eventListener as EventListener,49 options,50 );5152 // Remove event listener on cleanup53 return () => {54 targetElement.removeEventListener(55 eventName,56 eventListener as EventListener,57 options,58 );59 };60 }, [eventName, element, options]);61}
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 | |
| UseClickOutsideuse-click-outside | guarahooks | Hooks | Free | no deps | |
| UseConfirmuse-confirm | guarahooks | Hooks | Free | no deps | |
| UseCookieuse-cookie | guarahooks | Hooks | Free | no deps |
