--- title: Store Event Handlers in Refs impact: LOW impactDescription: stable subscriptions tags: advanced, hooks, refs, event-handlers, optimization --- ## Store Event Handlers in Refs Store callbacks in refs when used in effects that shouldn't re-subscribe on callback changes. **Incorrect (re-subscribes on every render):** ```tsx function useWindowEvent(event: string, handler: () => void) { useEffect(() => { window.addEventListener(event, handler) return () => window.removeEventListener(event, handler) }, [event, handler]) } ``` **Correct (stable subscription):** ```tsx function useWindowEvent(event: string, handler: () => void) { const handlerRef = useRef(handler) useEffect(() => { handlerRef.current = handler }, [handler]) useEffect(() => { const listener = () => handlerRef.current() window.addEventListener(event, listener) return () => window.removeEventListener(event, listener) }, [event]) } ```