</> getFieldState:
(name: string, formState?: Object) => ({isDirty, isTouched, invalid, error})
此方法在 react-hook-form (v7.25.0) 中引入,用于返回单个字段状态。如果您试图以类型安全的方式检索嵌套字段状态,它很有用。
属性
名称 | 类型 | 描述 |
---|---|---|
name | string | 注册的字段名称。 |
formState | object | 这是一个可选属性,仅在 formState 未从 useForm 、useFormContext 或 useFormState 中读取/订阅时才需要。阅读规则以了解更多信息 |
返回
名称 | 类型 | 描述 |
---|---|---|
isDirty | boolean | 字段已修改。 条件:订阅 dirtyFields 。 |
isTouched | boolean | 字段已收到焦点和模糊事件。 条件:订阅 touchedFields 。 |
invalid | boolean | 字段无效。 条件:订阅 errors 。 |
error | undefined | FieldError | 字段错误对象。 条件:订阅 errors 。 |
规则
-
name 需要与注册的字段名称匹配。
getFieldState("test")getFieldState("test") // ✅ register input and return field stategetFieldState("non-existent-name") // ❌ will return state as false and error as undefined -
getFieldState
通过订阅表单状态更新来工作,您可以通过以下方式订阅表单状态-
您可以在
useForm
、useFormContext
或useFormState
中订阅。这将建立表单状态订阅,并且不再需要getFieldState
的第二个参数。const {register,formState: { isDirty },} = useForm()register("test")getFieldState("test") // ✅const { isDirty } = useFormState()register("test")getFieldState("test") // ✅const {register,formState: { isDirty },} = useFormContext()register("test")getFieldState("test") // ✅ -
当表单状态订阅未设置时,您可以通过遵循下面的示例将整个
formState
作为第二个可选参数传递。const { register } = useForm()register("test")const { isDirty } = getFieldState("test") // ❌ formState isDirty is not subscribed at useFormconst { register, formState } = useForm()const { isDirty } = getFieldState("test", formState) // ✅ formState.isDirty subscribedconst { formState } = useFormContext()const { touchedFields } = getFieldState("test", formState) // ✅ formState.touchedFields subscribed
-
示例
import * as React from "react"import { useForm } from "react-hook-form"export default function App() {const {register,getFieldState,formState: { isDirty, isValid },} = useForm({mode: "onChange",defaultValues: {firstName: "",},})// you can invoke before render or within the render functionconst fieldState = getFieldState("firstName")return (<form><input {...register("firstName", { required: true })} />{" "}<p>{getFieldState("firstName").isDirty && "dirty"}</p>{" "}<p>{getFieldState("firstName").isTouched && "touched"}</p><buttontype="button"onClick={() => console.log(getFieldState("firstName"))}>field state</button></form>)}
感谢您的支持
如果您发现 React Hook Form 在您的项目中很有用,请考虑为其加星和支持。