/
githubmirror
/
react-hook-form
Обзор
Документация
Войти
/
githubmirror
/
react-hook-form
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
app/src/formStateWithSchema.tsx
94 строки
2 KB
Bill
✨ feature: useWatch/useFormState exact prop (#6983)
14 ноя 2021, 12:14
Не верифицирован
14 ноя 2021, 12:14
2371e8b
Код
Авторство
О чём код?
import React from 'react'; import { useForm, ValidationMode } from 'react-hook-form'; import * as yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import { useParams } from 'react-router-dom'; let renderCounter = 0; const validationSchema = yup .object() .shape({ firstName: yup.string().required(), lastName: yup.string().max(5).required(), select: yup.string().required(), radio: yup.string().required(), checkbox: yup.string().required(), }) .required(); const FormStateWithSchema: React.FC = () => { const { mode } = useParams(); const { register, handleSubmit, formState: { dirtyFields, isSubmitted, submitCount, touchedFields, isDirty, isSubmitting, isSubmitSuccessful, isValid, }, reset, } = useForm<{ firstName: string; lastName: string; select: string; radio: string | null; checkbox: boolean; }>({ resolver: yupResolver(validationSchema), mode: mode as keyof ValidationMode, defaultValues: { firstName: '', lastName: '', select: '', checkbox: false, radio: null, }, }); const onSubmit = () => {}; renderCounter++; return ( <form onSubmit={handleSubmit(onSubmit)}> <input {...register('firstName')} placeholder="firstName" /> <input {...register('lastName')} placeholder="lastName" /> <select {...register('select')}> <option value="">Select</option> <option value={1}>1</option> <option value={2}>1</option> </select> Radio1 <input type="radio" {...register('radio')} value="1" /> Radio2 <input type="radio" {...register('radio')} value="2" /> Radio3 <input type="radio" {...register('radio')} value="3" /> <input type="checkbox" {...register('checkbox')} /> <button id="submit">Submit</button> <button type="button" onClick={() => reset()} id="resetForm"> Reset </button> <div id="state"> {JSON.stringify({ isSubmitted, submitCount, isDirty, isSubmitting, isSubmitSuccessful, isValid, touched: Object.keys(touchedFields), dirty: Object.keys(dirtyFields), })} </div> <div id="renderCount">{renderCounter}</div> </form> ); }; export default FormStateWithSchema;