--- title: useEffectEvent for Stable Callback Refs impact: LOW impactDescription: prevents effect re-runs tags: advanced, hooks, useEffectEvent, refs, optimization --- ## useEffectEvent for Stable Callback Refs Access latest values in callbacks without adding them to dependency arrays. Prevents effect re-runs while avoiding stale closures. **Incorrect (effect re-runs on every callback change):** ```tsx function SearchInput({ onSearch }: { onSearch: (q: string) => void }) { const [query, setQuery] = useState('') useEffect(() => { const timeout = setTimeout(() => onSearch(query), 300) return () => clearTimeout(timeout) }, [query, onSearch]) } ``` **Correct (using React's useEffectEvent):** ```tsx import { useEffectEvent } from 'react'; function SearchInput({ onSearch }: { onSearch: (q: string) => void }) { const [query, setQuery] = useState('') const onSearchEvent = useEffectEvent(onSearch) useEffect(() => { const timeout = setTimeout(() => onSearchEvent(query), 300) return () => clearTimeout(timeout) }, [query]) } ```