면접 준비하면서 간단한 카운터 기능을 만들고 있는데, 버튼을 빠르게 누르면 숫자가 이상하게 올라가요.
코드:
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
const increase = () => {
setCount(count + 1);
setCount(count + 1);
setCount(count + 1);
};
return (
<div>
<p>{count}</p>
<button onClick={increase}>증가</button>
</div>
);
}
export default Counter;
오류: setCount를 세 번 썼으니까 한 번 클릭에 3이 더해져야 하는데, 계속 1만 더해져요.
시도: setCount 코드를 여러 줄 적어봤고, 새로고침도 해봤는데 똑같아요.
질문: 왜 setCount를 여러 번 호출해도 마지막에 한 번만 적용되는 것처럼 작동하는 건가요?
댓글8
-
빗방울
2026.10.30 17:52
-
빗방울
2026.10.30 17:52
ㄹㅇ 이거 모르면 처음에 진짜 당황함ㅋㅋ
배칭 처리 때문에 그런 거라 함수형으로 쓰는 게 국룰인 듯
-
빗방울
2026.10.30 18:21
맞음ㅋㅋ prev 안 쓰면 그냥 같은 값으로 계속 덮어쓰는 꼴이라
진짜 저거 모르면 한참 헤맴ㄷㄷ
-
빗방울
2026.10.30 18:09
공식 문서에 배칭(batching) 관련 내용 있을 텐데 한번 읽어보셈ㅋㅋ
이거 원리 제대로 이해하면 면접 때 대답하기 좋을 듯ㄷㄷ
-
빗방울
2026.10.30 18:34
근데 이거 면접 준비하신다는데
콘솔로 찍어봐도 바로 안 바뀌어서 더 킹받으실듯ㅋㅋ
setState 직후에 console.log 찍어보면 값 그대로라 당황함ㄷㄷ
-
빗방울
2026.10.30 22:12
ㄹㅇㅋㅋ 그거 진짜 멘붕 포인트임ㄷㄷ 그냥 렌더링 된 다음에 찍히는 거라 더 헷갈리실 듯ㅋㅋ
-
빗방울
2026.10.30 18:48
이거 useEffect로 count 값 감시해서 로그 찍어보면 바뀐 거 보일 텐데 한번 해보셈ㅋㅋ 면접 준비 화이팅하시길ㄷㄷ
-
빗방울
2026.10.30 21:49
면접 준비면 이참에 렌더링 최적화 쪽도 같이 파보셈ㅋㅋ 여기서 막혔으면 아마 나중에 성능 최적화 공부할 때 또 멘붕 올 수도 있을 듯ㄷㄷ
모든 이야기1455
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
이거 리액트 상태 업데이트 비동기로 처리해서 그런 거임ㅋㅋ 함수형 업데이트로 setCount(prev => prev + 1) 이렇게 바꿔보셈 바로 해결될듯