UNPKG

react-hook-form

Version:

Performant, flexible and extensible forms library for React Hooks

202 lines (140 loc) 4.45 kB
# Changelog ## [6.5.0] - 2020-08-23 ### Changed - `errors` is also part of `formState` object ## [6.4.0] - 2020-08-15 ### Added - `Controller`'s `render` prop will pass down `name` prop - `handleSubmit` take a second callback for errors callback - new mode `onTouched` will only trigger validation after inputs are touched ### Changed - `register` no longer compare `ref` difference with React Native ## [6.2.0] - 2020-08-11 ### Changed - IE 11 version will be required to install `@babel/runtime-corejs3` as dependency at your own project ## [6.2.0] - 2020-07-30 ### Changed - revert `getValues` will return default values before inputs registration ## [6.1.0] - 2020-07-26 ### Changed - `resolver` supports both async and sync - `getValues` will return default values before inputs registration ## [6.0.7] - 2020-07-17 ### Added - export `ArrayField` type ### Changed - error message will support array of messages for specific type ```diff - export type ValidateResult = Message | boolean | undefined; + export type ValidateResult = Message | Message[] | boolean | undefined; ``` ## [6.0.3] - 2020-07-10 ### Changed - Controller `onFocus` works with React Native - Controller stop producing `checked` prop by boolean `value` ## [6.0.2] - 2020-07-8 ### Added - export `UseFormOptions`, `UseFieldArrayOptions`, `FieldError`, `Field` and `Mode` type ## [6.0.1] - 2020-07-3 ### Added - export `ValidationRules` type ## [6.0.0] - 2020-07-1 ### Added - config for `shouldUnregister` which allow input to be persist even after unmount ```typescript useForm({ shouldUnregister: false, // unmount input state will be remained }); ``` - auto focus with useFieldArray ```ts append({}, (autoFocus = true)); prepend({}, (autoFocus = true)); insert({}, (autoFocus = true)); ``` - TS: NestedValue ```tsx import { useForm, NestedValue } from 'react-hook-form'; type FormValues = { key1: string; key2: number; key3: NestedValue<{ key1: string; key2: number; }>; key4: NestedValue<string[]>; }; const { errors } = useForm<FormValues>(); errors?.key1?.message; // no type error errors?.key2?.message; // no type error errors?.key3?.message; // no type error errors?.key4?.message; // no type error ``` - `useWatch` (new) subscribe to registered inputs. ```tsx <input name="test" ref={register} />; function IsolateReRender() { const { state } = useWatch({ name: 'test', control, defaultValue: 'default', }); return <div>{state}</div>; } ``` - `getValues()` support array of field names ```typescript jsx getValues(['test', 'test1']); // { test: 'test', test1: 'test1' } ``` - `useForm({ mode: 'all' })` support all validation ### Changed - rename `validationResolver` to `resolver` - rename `validationContext` to `context` - rename `validateCriteriaMode` to `criteriaMode` - rename `triggerValidation` to `trigger` - rename `clearError` to `clearErrors` - rename `FormContext` to `FormProvider` - rename `dirty` to `isDirty` - `dirtyFields` change type from `Set` to `Object` - Controller with render props API, and removed the following props: - onChange - onChangeName - onBlur - onBlurName - valueName ```diff -<Controller - as={CustomInput} - valueName="textValue" - onChangeName="onTextChange" - control={control} - name="test" -/> +<Controller + render={({ onChange, onBlur, value }) => ( + <CustomInput onTextChange={onChange} onBlur={onBlur} textValue={value} /> + )} + control={control} + name="test" +/> ``` - `setError` will focus one error at a time and remove confusing set multiple errors, behavior change. - setError will persis an error if it's not part of the form, which requires manual remove with clearError - setError error will be removed by validation rules, rules always take over errors ```diff - setError('test', 'test', 'test') + setError('test', { type: 'test', message: 'bill'}) ``` - `setValue` will focus on input at a time ```diff setValue('test', 'value', { shouldValidate: false, shouldDirty: false }) ``` ### Removed - remove `validationSchema` and embrace validation `resolver` - remove `nest` option for `watch` & `getValues`, so data return from both methods will be in FormValues shape. ```typescript diff -getValues({ nest: true }); // { test: { data: 'test' }} -watch({ nest: true }); // { test: { data: 'test' }} +getValues(); // { test: { data: 'test' }} +watch(); // { test: { data: 'test' }} ```