React 리액트에서 setInterval 쓸 때 ref 없으면 꼬인다
페이지 정보

영삼이
본문
✅ 리액트에서 setInterval 쓸 때 ref
없으면 꼬인다
클로저 문제, 이 패턴으로 해결하자
타이머를 설정하고 내부에서 상태를 변경할 때 흔히 이렇게 한다:
useEffect(() => {
const id = setInterval(() => {
setCount(count + 1);
}, 1000);
return () => clearInterval(id);
}, []);
문제는 count
가 계속 0으로만 인식됨
→ 초기값만 클로저로 갇혀서 최신 값 반영 안 됨
✅ 해결: ref
로 최신 값 유지
const countRef = useRef(0);
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => {
countRef.current += 1;
setCount(countRef.current);
}, 1000);
return () => clearInterval(id);
}, []);
ref
를 쓰면 클로저 문제 없이
항상 최신 값을 기준으로 동작한다.
타이머, 웹소켓, 이벤트 리스너 모두 이 방식이 안전하다.
- 이전글setState 연속 호출이 안 먹힐 때 의외의 해결법 25.03.28
- 다음글상태 변경 후 작업이 필요할 땐 useEffect를 써야 깔끔하다 25.03.28
댓글목록
등록된 댓글이 없습니다.