--- 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]); } ```