
프론트엔드
React Hook Form의 isDirty와 dirtyFields를 알아보자
두줄요약
React Hook Form의 isDirty와 dirtyFields가 서로 다르게 계산되는 구조를 설명했습니다. setValue 사용 시 shouldDirty 옵션이 상태 재계산에 미치는 영향을 정리했습니다.
문제 상황
- 폼 값이 기본값으로 복귀해도
isDirty가false로 바뀌지 않는 현상 isDirty와dirtyFields의 상태 불일치로 사용자 입력 여부 판단 혼란
원인 분석
isDirty는 전체 폼 값과defaultValues의 깊은 비교 결과dirtyFields는 개별 입력 필드 수준의 변경 상태setValue호출 시shouldDirty옵션 미지정으로 dirty 상태 재계산 미실행
구조와 흐름
register기반onChange와 옵션이 설정된setValue에서updateTouchAndDirty실행isDirty는_getDirty를 통해 전체 값 비교 수행dirtyFields는isBlurEvent,shouldDirty조건에 따라 필드 상태 갱신
주의할 점
- 전체 폼의 변경 여부에는
isDirty사용 - 특정 필드 변경 여부에는
dirtyFields사용 setValue로 변경 상태까지 반영할 경우shouldDirty: true설정

