formState: Object
This object contains information about the form state. If you want to subscribe to formState via useEffect, make sure that you place the entire formState in the optional array.
Rules
formState is wrapped with a Proxy to improve render performance and skip extra logic if specific state is not subscribed to. Therefore make sure you invoke or read it before a render in order to enable the state update. This reduced re-render feature only applies to the Web platform due to a lack of support for Proxy in React Native.
useEffect(() => { if (formState.errors.firstName) { // do the your logic here } }, [formState]); // ✅ // ❌ formState.errors will not trigger the useEffect
// ❌ formState.isValid is accessed conditionally, // so the Proxy does not subscribe to changes of that state return <button disabled={!formState.isDirty || !formState.isValid} />; // ✅ read all formState values to subscribe to changes const { isDirty, isValid } = formState; return <button disabled={!isDirty || !isValid} />;
Return
| Name | Type | Description |
|---|---|---|
isDirty | boolean | Set to
|
dirtyFields | object | An object with the user-modified fields. Make sure to provide all inputs' defaultValues via useForm, so the library can compare against the |
touchedFields | object | An object containing all the inputs the user has interacted with. |
isSubmitted | boolean | Set to true after the form is submitted. Will remain true until the reset method is invoked. |
isSubmitSuccessful | boolean | Indicate the form was successfully submitted without any |
isSubmitting | boolean | true if the form is currently being submitted. false if otherwise. |
submitCount | number | Number of times the form was submitted. |
isValid | boolean | Set to true if the form doesn't have any errors.Note: |
isValidating | boolean | Set to true during validation. |
| errors | object | An object with field errors. There is also an ErrorMessage component to retrieve error message easily. |
import React from "react"; import { useForm } from "react-hook-form"; export default function App() { const { register, handleSubmit, // Read the formState before render to subscribe the form state through the Proxy formState: { errors, isDirty, isSubmitting, touchedFields, submitCount }, } = useForm(); const onSubmit = (data: FormInputs) => console.log(data); return ( <form onSubmit={handleSubmit(onSubmit)}> <input {...register("test")} /> <input type="submit" /> </form> ); }import React from "react"; import { useForm } from "react-hook-form"; type FormInputs = { test: string } export default function App() { const { register, handleSubmit, // Read the formState before render to subscribe the form state through Proxy formState: { errors, isDirty, isSubmitting, touchedFields, submitCount }, } = useForm<FormInputs>(); const onSubmit = (data: FormInputs) => console.log(data); return ( <form onSubmit={handleSubmit(onSubmit)}> <input {...register("test")} /> <input type="submit" /> </form> ); }