목록 보기
React Hook Form의 isDirty와 dirtyFields를 알아보자
프론트엔드

React Hook Form의 isDirty와 dirtyFields를 알아보자

화해
화해
2022년 6월 7일

두줄요약

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 설정

다음 읽기

#React 주제를 다룬 다른 회사 글

선언적 폼 바인딩

다이얼로그 수정 폼에서 useEffect 기반 수동 바인딩으로 발생한 상태 꼬임 문제를 정리했습니다. React Hook Form의 values로 선언적 동기화를 적용해 잔상과 레이스 컨디션을 줄였습니다.

넥스트리
넥스트리
프론트엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...