질문 87 · 실전 면접 답변
상태 setter를 호출하면 언제 값이 바뀌나요?
이렇게 답해 보세요 (핵심 답변)
setter를 호출하면 현재 실행 중인 함수 내부의 state 변수가 즉시 바뀌는 것이 아니라, 다음 렌더에서 사용할 업데이트가 큐에 예약됩니다. React는 이벤트 핸들러 안의 여러 업데이트 요청을 모아서(배칭) 처리한 뒤 컴포넌트를 다시 호출하며, 그때 새로 실행된 컴포넌트 함수가 갱신된 state 스냅샷을 읽게 됩니다. 따라서 같은 이벤트 안에서 이전 계산 결과에 이어서 값을 갱신해야 한다면 setCount(c => c + 1) 같은 업데이터 함수를 전달해야 합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 한 번의 렌더에서 만들어진 이벤트 핸들러 클로저는 그 렌더 시점의 고정된 state 스냅샷을 참조합니다.
- 배칭(Batching)을 통해 여러 state가 바뀔 때도 불필요한 중간 렌더링 없이 한 번에 일관된 화면을 그릴 수 있습니다.
면접에서 자주 하는 실수
setter는 Promise를 반환하는 함수가 아니므로 await setState()를 붙여도 다음 렌더나 DOM 업데이트 완료를 기다릴 수 없습니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 87번을 바탕으로 질문과 답변을 새로 정리했습니다.