Search

[오픈소스 기여] 오류 조회 개선 및 신규 API 추가

PR링크
레포
React-Hook-Form
상태
release 완료
유형
동작 수정
타입 수정
테스트코드 추가

기여 요약

오류를 조회·초기화하는 동작과 오류 경로의 타입 정확도를 하나의 흐름으로 개선했습니다. 구독 없이 오류를 읽는 신규 API를 설계하고, 내부 상태 불일치와 부모 경로 타입 누락을 해결했으며 공통 오류 경로 타입과 회귀 테스트를 보강했습니다.

관련 PR

1. 구독 없이 오류를 조회하는 getErrors API 추가

문제 상황

formState.errorssubscribe는 구독이 필요하고 getFieldState는 한 필드만 조회할 수 있어, 현재 오류를 필요할 때 한 번에 읽는 공개 API가 없었음

해결방안

검증이나 구독을 발생시키지 않고 저장된 오류를 읽는 getErrors API를 설계
인자 없음·단일 경로·경로 배열 호출을 지원하고 배열 입력은 순서와 길이를 보존하는 튜플 타입으로 반환
useForm, useFormContext, createFormControl의 동작·타입 테스트를 추가

2. clearErrors의 내부 상태 불일치 해결

문제 상황

구독자 없이 createFormControl()을 사용할 때 clearErrors() 이후에도 내부 오류가 남아 getFieldState(name).invalid가 계속 true를 반환

원인 파악

구독자에게 빈 오류 객체만 전달하고 _formState.errors 자체는 초기화하지 않아 내부 상태와 이벤트 값이 불일치

해결방안

인자 없는 clearErrors() 호출 시 내부 오류 상태를 직접 초기화하고 갱신된 값을 전달
독립형 createFormControl()과 무구독 상황을 재현하는 회귀 테스트를 추가

3. 부모 경로의 중첩 오류 타입 추론 개선

문제 상황

getFieldState(name).error가 항상 FieldError로 추론되어 배열·객체의 부모 경로에서 반환되는 중첩 오류 구조를 타입으로 표현하지 못함

해결방안

선택한 필드 경로로 오류 타입을 계산하는 공개 FieldPathError 타입을 추가
부모 경로는 중첩 오류를 포함하고 리프·제네릭 경로는 기존 타입을 유지하도록 구성
배열·객체·리프 경로에 대한 타입 테스트를 보강

4. root·form 오류 경로 타입 공통화

문제 상황

UseFormSetErrorUseFormClearErrorsroot, root.*, form, form.* 오류 경로 타입을 각각 중복 정의

해결방안

공통 ErrorNamespacePath 타입을 추출해 두 API가 동일한 오류 네임스페이스 규칙을 사용하도록 통합

5. FieldErrors의 Blob 타입 회귀 테스트 보강

문제 상황

FieldErrors 타입 테스트의 설명에는 Blob이 일반 레코드 필드로 처리되지 않아야 한다고 명시되어 있었지만 실제 검증 사례가 누락

해결방안

최상위와 중첩 경로의 Blob 타입 단언을 추가해 타입 정의와 테스트 설명을 일치시키고 회귀를 방지

개별 기록