Содержание
- Typescript Support
- >Resolver
- >SubmitHandler
- >Control
- >UseFormReturn
- >UseFormProps
- >UseFieldArrayReturn
- >UseFieldArrayProps
- >UseControllerReturn
- >UseControllerProps
- >FieldError
- >FieldErrors
- >Field
- >FieldPath
- >FieldPathByValue
- >FieldValues
- >FieldArrayWithId
- >Mode
- >RegisterOptions
- >FormStateProxy
- >NestedValue (Deprecated at 7.33.0)
- Thank you for your support
Typescript Support
Important: Typescript ^4.3 above is the recommended version to work with react hook form.
>Resolver
import React from "react"import useForm, Resolver > from "react-hook-form"type FormValues =firstName: stringlastName: string>const resolver: ResolverFormValues> = async (values) =>returnvalues: values.firstName ? values : >,errors: !values.firstName?firstName:type: "required",message: "This is required.",>,>: >,>>export default function App()constregister,handleSubmit,formState: errors >,> = useFormFormValues>( resolver >)const onSubmit = handleSubmit((data) => console.log(data))return (form onSubmit=onSubmit>>input . register("firstName")> placeholder="Bill" />errors?.firstName && p>errors.firstName.message>/p>>input . register("lastName")> placeholder="Luo" />input type="submit" />/form>)>
>SubmitHandler
import React from "react"import useForm, SubmitHandler > from "react-hook-form"type FormValues =firstName: stringlastName: stringemail: string>export default function App()const register, handleSubmit > = useFormFormValues>()const onSubmit: SubmitHandlerFormValues> = (data) => console.log(data)return (form onSubmit=handleSubmit(onSubmit)>>input . register("firstName")> />input . register("lastName")> />input type="email" . register("email")> />input type="submit" />/form>)>
>Control
import useForm, useWatch, Control > from "react-hook-form"type FormValues =firstName: stringlastName: string>function IsolateReRender( control >: control: ControlFormValues> >)const firstName = useWatch(control,name: "firstName",defaultValue: "default",>)return div>firstName>/div>>export default function App()const register, control, handleSubmit > = useFormFormValues>()const onSubmit = handleSubmit((data) => console.log(data))return (form onSubmit=onSubmit>>input . register("firstName")> />input . register("lastName")> />IsolateReRender control=control> />input type="submit" />/form>)>
>UseFormReturn
export type UseFormReturnTFieldValues extends FieldValues = FieldValues,TContext = any> =watch: UseFormWatchTFieldValues>getValues: UseFormGetValuesTFieldValues>getFieldState: UseFormGetFieldStateTFieldValues>setError: UseFormSetErrorTFieldValues>clearErrors: UseFormClearErrorsTFieldValues>setValue: UseFormSetValueTFieldValues>trigger: UseFormTriggerTFieldValues>formState: FormStateTFieldValues>resetField: UseFormResetFieldTFieldValues>reset: UseFormResetTFieldValues>handleSubmit: UseFormHandleSubmitTFieldValues>unregister: UseFormUnregisterTFieldValues>control: ControlTFieldValues, TContext>register: UseFormRegisterTFieldValues>setFocus: UseFormSetFocusTFieldValues>>
import type FieldValues, UseFormReturn, SubmitHandler > from "react-hook-form"import React from "react"import useForm > from "react-hook-form"type InputProps = React.DetailedHTMLPropsReact.InputHTMLAttributesHTMLInputElement>,HTMLInputElement>const Input = React.forwardRefHTMLInputElement, InputProps>((props, ref) => (input ref=ref> . props> />))type Option =label: React.ReactNodevalue: string | number | string[]>type SelectProps = React.DetailedHTMLPropsReact.SelectHTMLAttributesHTMLSelectElement>,HTMLSelectElement> & options: Option[] >const Select = React.forwardRefHTMLSelectElement, SelectProps>(( options, . props >, ref) => (select ref=ref> . props>>options.map(( label, value >) => (option value=value>>label>/option>))>/select>))type FormPropsTFormValues extends FieldValues> =onSubmit: SubmitHandlerTFormValues>children: (methods: UseFormReturnTFormValues>) => React.ReactNode>const Form = TFormValues extends FieldValues>(onSubmit,children,>: FormPropsTFormValues>) =>const methods = useFormTFormValues>()return (form onSubmit=methods.handleSubmit(onSubmit)>>children(methods)>/form>)>type FormValues =firstName: stringlastName: stringsex: string>export default function App()const onSubmit = (data: FormValues) => console.log(data)return (FormFormValues> onSubmit=onSubmit>>( register >) => (>Input . register("firstName")> />Input . register("lastName")> />Select. register("sex")>options=[label: "Female", value: "female" >,label: "Male", value: "male" >,label: "Other", value: "other" >,]>/>Input type="submit" />/>)>/Form>)>
>UseFormProps
export type UseFormPropsTFieldValues extends FieldValues = FieldValues,TContext extends object = object> = Partialmode: ModereValidateMode: ModedefaultValues: DeepPartialTFieldValues>resolver: ResolverTFieldValues, TContext>context: TContextshouldFocusError: booleanshouldUnregister: booleancriteriaMode: "firstError" | "all">>
>UseFieldArrayReturn
export type UseFieldArrayReturnTFieldValues extends FieldValues = FieldValues,TFieldArrayName extends FieldArrayPathTFieldValues> = FieldArrayPathTFieldValues>,TKeyName extends string = "id"> =swap: (indexA: number, indexB: number) => voidmove: (indexA: number, indexB: number) => voidprepend: (value:| PartialFieldArrayTFieldValues, TFieldArrayName>>| PartialFieldArrayTFieldValues, TFieldArrayName>>[],options?: FieldArrayMethodProps) => voidappend: (value:| PartialFieldArrayTFieldValues, TFieldArrayName>>| PartialFieldArrayTFieldValues, TFieldArrayName>>[],options?: FieldArrayMethodProps) => voidremove: (index?: number | number[]) => voidinsert: (index: number,value:| PartialFieldArrayTFieldValues, TFieldArrayName>>| PartialFieldArrayTFieldValues, TFieldArrayName>>[],options?: FieldArrayMethodProps) => voidupdate: (index: number,value: PartialFieldArrayTFieldValues, TFieldArrayName>>) => voidreplace: (value:| PartialFieldArrayTFieldValues, TFieldArrayName>>| PartialFieldArrayTFieldValues, TFieldArrayName>>[]) => voidfields: FieldArrayWithIdTFieldValues, TFieldArrayName, TKeyName>[]>
>UseFieldArrayProps
export type UseFieldArrayPropsTKeyName extends string = "id",TControl extends Control = Control> =name: stringkeyName?: TKeyNamecontrol?: TControlrules?: PickRegisterOptionsTFieldValues>,"maxLength" | "minLength" | "validate" | "required">>
>UseControllerReturn
export type UseControllerReturnTFieldValues extends FieldValues = FieldValues,TName extends FieldPathTFieldValues> = FieldPathTFieldValues>> =field: ControllerRenderPropsTFieldValues, TName>formState: UseFormStateReturnTFieldValues>fieldState: ControllerFieldState>
>UseControllerProps
export type UseControllerPropsTFieldValues extends FieldValues = FieldValues,TName extends FieldPathTFieldValues> = FieldPathTFieldValues>> =name: TNamerules?: OmitRegisterOptionsTFieldValues, TName>,"valueAsNumber" | "valueAsDate" | "setValueAs" | "disabled">shouldUnregister?: booleandefaultValue?: FieldPathValueTFieldValues, TName>control?: ControlTFieldValues>>
>FieldError
export type FieldError =type: stringref?: Reftypes?: MultipleFieldErrorsmessage?: Message>
>FieldErrors
export type FieldErrorsTFieldValues extends FieldValues = FieldValues> =DeepMapTFieldValues, FieldError>
>Field
export type Field =ref: RefmutationWatcher?: MutationWatcheroptions?: RadioOrCheckboxOption[]> & RegisterOptions
>FieldPath
This type is useful when you define custom component’s name prop, and it will type check again your field path.
export type FieldPathTFieldValues extends FieldValues> = PathTFieldValues>
>FieldPathByValue
This type will return union with all available paths that match the passed value
function FieldTFieldValues extends FieldValues,TPath extends FieldPathByValueTFieldValues, Date>>( control, name >: control: ControlTFieldValues>; name: TPath >)const field > = useController(control,name,>)>
>FieldValues
export type FieldValues = Recordstring, any>
>FieldArrayWithId
export type FieldArrayWithIdTFieldValues extends FieldValues = FieldValues,TFieldArrayName extends FieldArrayPathTFieldValues> = FieldArrayPathTFieldValues>,TKeyName extends string = "id"> = FieldArrayTFieldValues, TFieldArrayName> & RecordTKeyName, string>
>Mode
export type Mode =onBlur: "onBlur"onChange: "onChange"onSubmit: "onSubmit"onTouched: "onTouched"all: "all">
>RegisterOptions
export type RegisterOptions = Partialrequired: Message | ValidationRuleboolean>min: ValidationRulenumber | string>max: ValidationRulenumber | string>maxLength: ValidationRulenumber | string>minLength: ValidationRulenumber | string>pattern: ValidationRuleRegExp>validate: Validate | Recordstring, Validate>>>
>FormStateProxy
export type FormStateProxyTFieldValues extends FieldValues = FieldValues> =isDirty: booleandirtyFields: DirtiedTFieldValues>isSubmitted: booleansubmitCount: numbertouched: FieldNamesTFieldValues>isSubmitting: booleanisValid: booleanerrors: FieldErrorsTFieldValues>>
>NestedValue (Deprecated at 7.33.0)
import React from "react"import useForm, NestedValue > from "react-hook-form"import Autocomplete, TextField, Select > from "@material-ui/core"import Autocomplete > from "@material-ui/lab"type Option =label: stringvalue: string>const options = [label: "Chocolate", value: "chocolate" >,label: "Strawberry", value: "strawberry" >,label: "Vanilla", value: "vanilla" >,]export default function App()constregister,handleSubmit,watch,setValue,formState: errors >,> = useFormautocomplete: NestedValueOption[]>select: NestedValuenumber[]>>>(defaultValues: autocomplete: [], select: [] >,>)const onSubmit = handleSubmit((data) => console.log(data))React.useEffect(() =>register("autocomplete",validate: (value) => value.length || "This is required.",>)register("select",validate: (value) => value.length || "This is required.",>)>, [register])return (form onSubmit=onSubmit>>Autocompleteoptions=options>getOptionLabel=(option: Option) => option.label>onChange=(e, options) => setValue("autocomplete", options)>renderInput=(params) => (TextField. params>error=Boolean(errors?.autocomplete)>helperText=errors?.autocomplete?.message>/>)>/>Selectvalue=""onChange=(e) => setValue("muiSelect", e.target.value as number[])>>MenuItem value=10>>Ten/MenuItem>MenuItem value=20>>Twenty/MenuItem>/Select>input type="submit" />/form>)>
import useForm, NestedValue > from "react-hook-form"type FormValues =key1: stringkey2: numberkey3: NestedValuekey1: stringkey2: number>>key4: NestedValuestring[]>>constformState: errors >,> = useFormFormValues>()errors?.key1?.message // no type errorerrors?.key2?.message // no type errorerrors?.key3?.message // no type errorerrors?.key4?.message // no type error
Thank you for your support
If you find React Hook Form to be useful in your project, please consider to star and support it.
A project by BEEKAI | Please support us by leaving a ★ @github