useController
(props?: UseControllerProps) => { field: object, fieldState: object, formState: object }
このカスタムフックは Controller
を強化します。さらに、同じpropsとメソッドを共有します。 Controller
。再利用可能な制御入力を作成するのに役立ちます。
Props
次の表には、引数に関する情報が含まれています。 useController
.
名前 | 型 | 必須 | 説明 |
---|---|---|---|
name | FieldPath | ✓ | 入力の一意の名前。 |
control | Control | control useForm を呼び出すことによって提供されるオブジェクト。FormProvider を使用する場合はオプションです。 | |
defaultValue | unknown | 重要:
| |
rules | Object |
required、min、max、minLength、maxLength、pattern、validate
| |
shouldUnregister | boolean = false | アンマウント後、入力は登録解除され、defaultValuesも削除されます。 注: このpropは、 | |
disabled | boolean = false |
|
戻り値
次の表には、 useController
が生成するプロパティに関する情報が含まれています。
string
React.Ref
オブジェクト名 | 名前 | 型 | 説明 |
---|---|---|---|
field | onChange | (value: any) => void | ライブラリに入力の値を送信する関数。 |
field | onBlur | () => void | 入力のonBlurイベントをライブラリに送信する関数。入力の |
field | value | unknown | 制御されたコンポーネントの現在の値。 |
field | disabled | boolean | 入力の無効状態。 |
field | name | ||
登録されている入力の名前。 | |||
field | ref | ||
フックフォームを入力に接続するために使用されるref。エラー入力をフォーカスできるように、 コンポーネントの入力refに | |||
fieldState | invalid | boolean | 現在の入力の無効状態。 |
fieldState | isTouched | boolean | 現在の制御された入力のタッチ状態。 |
fieldState | isDirty | boolean | 現在の制御された入力のダーティ状態。 |
fieldState | error | object | この特定の入力のエラー。 |
formState | isDirty | boolean | ユーザーが入力のいずれかを変更した後、
|
formState | dirtyFields | object | ユーザーが変更したフィールドを持つオブジェクト。ライブラリが
|
formState | touchedFields | object | ユーザーが操作したすべての入力を含むオブジェクト。 |
formState | defaultValues | object | で設定された値 useFormのdefaultValuesまたは、 reset APIを介して更新されたdefaultValues。 |
formState | isSubmitted | boolean | フォームが送信された後、true に設定されます。reset メソッドが呼び出されるまで true のままになります。 |
formState | isSubmitSuccessful | boolean | フォームがランタイムエラーなしで正常に送信されたことを示します。 |
formState | isSubmitting | boolean | フォームが現在送信中の場合はtrue 。 それ以外の場合はfalse 。 |
formState | isLoading | boolean | フォームが現在非同期のデフォルト値をロードしている場合は 重要: このpropは、非同期の
|
formState | submitCount | number | フォームが送信された回数。 |
formState | isValid | boolean | フォームにエラーがない場合は true に設定されます。
|
formState | isValidating | boolean | 検証中はtrue に設定されます。 |
formState | validatingFields | boolean | 非同期検証を取得しているフィールドをキャプチャします。 |
formState | errors | object | フィールドエラーを含むオブジェクト。エラーメッセージを簡単に取得するための ErrorMessage コンポーネントもあります。 |
例
import { TextField } from "@material-ui/core";import { useController, useForm } from "react-hook-form";function Input({ control, name }) {const {field,fieldState: { invalid, isTouched, isDirty },formState: { touchedFields, dirtyFields }} = useController({name,control,rules: { required: true },});return (<TextFieldonChange={field.onChange} // send value to hook formonBlur={field.onBlur} // notify when input is touched/blurvalue={field.value} // input valuename={field.name} // send down the input nameinputRef={field.ref} // send input ref, so we can focus on input when error appear/>);}
ヒント
MUI、AntD、Chakra UIなどの外部制御コンポーネントを使用する場合は、各propの役割を認識することが重要です。その役割は、入力を監視し、報告し、値を設定することです。
onChange: データをフックフォームに送信します
onBlur: 入力が操作されたことを報告します(フォーカスとブラー)
value: 入力の初期値と更新値を設定します
ref: エラーで入力をフォーカスできるようにします
name: 入力に一意の名前を付けます
状態をホストし、
useController
.const { field } = useController();const [value, setValue] = useState(field.value);onChange={(event) => {field.onChange(parseInt(event.target.value)) // data send back to hook formsetValue(event.target.value) // UI state}}と組み合わせても問題ありません。入力を再度
register
しないでください。このカスタムフックは、登録プロセスを処理するように設計されています。const { field } = useController({ name: 'test' })<input {...field} /> // ✅<input {...field} {...register('test')} /> // ❌ double up the registrationコンポーネントごとに単一の
useController
を使用するのが理想的です。複数使用する必要がある場合は、propの名前を変更してください。代わりにController
の使用を検討することをお勧めします。代わりに。const { field: input } = useController({ name: 'test' })const { field: checkbox } = useController({ name: 'test1' })<input {...input} /><input {...checkbox} />
ご支援ありがとうございます
もしあなたのプロジェクトでReact Hook Formが役に立つようでしたら、スターを付けてサポートを検討してください。