Kar

Kar started this conversation 3 months ago.

Stale closures in useEffect or timers — state stuck at initial value

Inside a useEffect, I use state variables or functions that seem “frozen” even after updates. For example, a counter set by interval never increments past the initial value.

Digiaru

Posted 3 months ago

JavaScript closures capture initial values at render time, so callbacks inside useEffect don’t see later updates. This stale state causes incorrect behavior ([turn0reddit23], [turn0reddit17]). Fixes: • Use functional updates: setCount(prev => prev + 1) • Move definitions inside the effect, or use refs to store current values. • Ensure dependencies include the functions or state used, memoized via useCallback where necessary.