Effects and callbacks capture values from the render where they were created.

Section: Effect Dependency Pitfalls

Stale closure pitfall

tsx
tsx
useEffect(() => {
  const id = setInterval(() => {
    console.log(count); // can go stale if dependencies are wrong
  }, 1000);
  return () => clearInterval(id);
}, [count]);
Explanation

If the effect depends on `count`, include it or restructure the code to avoid stale reads.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Effect Dependency Pitfalls
Move non-reactive logic out of effects
Keep effects focused on synchronization.
OpenIn sheettsxsame section
Memoize objects used in dependencies
Avoid recreating dependency objects every render when identity matters.
OpenIn sheettsxsame section
Perform event-specific work in event handlers
Do not move user-triggered logic into effects unnecessarily.
OpenIn sheettsx3 tag match
Call hooks only at the top level
Do not call hooks in conditions, loops, or nested functions.
OpenIn sheettsx2 tag match
Do not memoize everything
Memoization has a cost; use it when it solves a concrete problem.
OpenIn sheettsx2 tag match
Call hooks only from components or custom hooks
Do not call hooks from regular utility functions.
OpenIn sheettsx2 tag match