useFormState
</> useFormState: (UseFormStateProps) => FormState
이 커스텀 훅을 사용하면 각 폼 상태를 구독하고 커스텀 훅 수준에서 리렌더링을 격리할 수 있습니다. 폼 상태 구독 범위가 독립적이므로 다른 useFormState나 useForm 훅에 영향을 주지 않습니다. 이 훅을 사용하면 크고 복잡한 폼 애플리케이션에서 리렌더링의 영향을 줄일 수 있습니다.
Props(속성)
| 이름 | 타입 | 설명 |
|---|---|---|
control | Object | control 객체이며 useForm이 제공합니다. FormProvider를 사용한다면 선택 사항입니다. |
name | string | string[] | v7.4.0부터 단일 입력 이름이나 이름 배열을 지정하거나 모든 입력의 formState 업데이트를 구독합니다. |
disabled | boolean = false | v7.13.0부터 구독을 비활성화하는 옵션입니다. |
exact | boolean = false | v7.20.0부터 이름을 정확히 일치시킬지 지정합니다. false(기본값)이면 구독한 이름이 변경된 필드 이름의 접두사이거나 그 반대일 때 구독이 실행됩니다(예: "users"를 구독하면 "users.0.name" 업데이트를 받음). v7.81.0부터 true이면 구독한 "users.0.name" 필드 자체나 상위 경로 "users.0" 또는 "users"를 setValue로 설정할 때 업데이트를 받지만, 중첩된 하위 경로가 변경될 때는 실행되지 않습니다("users" 구독은 "users.0.name" 업데이트를 받지 않음). |
반환값
| 이름 | 타입 | 설명 |
|---|---|---|
isDirty | boolean | 사용자가 입력 중 하나를 수정하면 true로 설정됩니다.
|
dirtyFields | object | 사용자가 수정한 필드를 담은 객체입니다. 모든 입력의 defaultValues를 useForm을 통해 제공하면 라이브러리가 defaultValues.와 비교할 수 있습니다.
|
touchedFields | object | 사용자가 상호작용한 모든 입력을 담은 객체입니다. |
defaultValues | object | v7.37.0부터 useForm의 defaultValues에 설정했거나 reset API로 업데이트한 defaultValues 값입니다. |
isSubmitted | boolean | 폼이 제출되면 true로 설정됩니다. true 상태는 reset 메서드를 호출할 때까지 유지됩니다. |
isSubmitSuccessful | boolean | 런타임 오류 없이 폼이 성공적으로 제출되었음을 나타냅니다. |
isSubmitting | boolean | 현재 폼을 제출하고 있으면 true, 그렇지 않으면 false입니다. |
isLoading | boolean | v7.41.0부터 현재 폼이 비동기 기본값을 불러오고 있으면 true입니다.
|
submitCount | number | 폼을 제출한 횟수입니다. |
isValid | boolean | 폼에 오류가 없으면 true로 설정됩니다.
|
isValidating | boolean | 검증 중에는 true로 설정됩니다. |
validatingFields | object | v7.51.0부터 비동기 검증 중인 필드를 담습니다. |
errors | object | 필드 오류를 담은 객체입니다. 오류 메시지를 쉽게 가져오는 ErrorMessage 컴포넌트도 있습니다. |
disabled | boolean | v7.48.0부터 폼이 비활성화되면 true로 설정됩니다. disabled prop은 useForm에서 지정합니다. |
isReady | boolean | v7.56.0부터 formState 구독 설정이 준비되면 true로 설정됩니다. |
예시
import { useForm, useFormState } from "react-hook-form"
function Child({ control }) {
const { dirtyFields } = useFormState({ control })
return dirtyFields.firstName ? <p>Field is dirty.</p> : null
}
export default function App() {
const { register, handleSubmit, control } = useForm({
defaultValues: {
firstName: "firstName",
},
})
const onSubmit = (data) => console.log(data)
return (
<form onSubmit={handleSubmit(onSubmit)}>
<input {...register("firstName")} placeholder="First Name" />
<Child control={control} />
<input type="submit" />
</form>
)
}