본문 바로가기
Q&A2026년 4월 13일1분 읽기

React useEffect 안의 setInterval이 state 최신값을 못 읽습니다 (stale closure)

코딩하는민수
조회 373댓글 3

카운트다운 훅을 만들고 있는데, setInterval 안에서 찍는 count 값이 항상 0만 찍힙니다.

function useCountdown() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const id = setInterval(() => {
      console.log(count); // 항상 0
      setCount(c => c + 1);
    }, 1000);
    return () => clearInterval(id);
  }, []);

  return count;
}

setCount(c => c + 1)로 업데이트는 정상 동작하는데, 콘솔에 찍는 count만 0 그대로예요. deps에 count를 넣으면 interval이 매초 재생성돼서 원래 의도가 아니고요.

deps 안 건드리고 최신값 참조하는 방법이 있나요?

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록