useField
は、Formikの動作を任意のフィールドコンポーネントに適用するために使用されるReactフックです。 Field
が適切でない場合に、最大の柔軟性を提供します。 使用方法は2つあります。
import React from 'react';import { useField, Form, FormikProps, Formik } from 'formik';interface Values {firstName: string;lastName: string;email: string;}const MyTextField = ({ label, ...props }) => {const [field, meta] = useField(props);return (<><label>{label}<input {...field} {...props} /></label>{meta.touched && meta.error ? (<div className="error">{meta.error}</div>) : null}</>);};const Example = () => (<div><h1>My Form</h1><FormikinitialValues={{email: '',firstName: 'red',lastName: '',}}onSubmit={(values, actions) => {setTimeout(() => {alert(JSON.stringify(values, null, 2));actions.setSubmitting(false);}, 1000);}}>{(props: FormikProps<Values>) => (<Form><MyTextField name="firstName" type="text" label="First Name" /><MyTextField name="lastName" type="text" label="Last Name" /><MyTextField name="email" type="email" label="Email" /><button type="submit">Submit</button></Form>)}</Formik></div>);
useField<Value = any>(name: string | FieldHookConfig<Value>): [FieldInputProps<Value>, FieldMetaProps<Value>, FieldHelperProps]
FieldProps
、FieldMetaProps
、FieldHelperProps
を含む3つの要素を持つ配列(タプル)を返すカスタムReact Hookです。 引数として、フィールド名の文字列またはオブジェクトを受け入れます。 オブジェクトには、少なくとも name
キーが含まれている必要があります。 このオブジェクトは、<Field>
に渡すプロパティのサブセットであり、FieldProps
の値と関数は <Field>
の動作を正確に模倣します。 これは便利であり、一般的に推奨されます。 なぜなら、オブジェクトに関連するキーと値(例: type: 'checkbox'
、multiple: true
など)が含まれている場合、Formikのチェックボックス、ラジオボタン、複数選択の動作を利用できるからです。
FieldMetaProps
には、フィールドのスタイルを設定したり、フィールドを変更したりするために使用できる、フィールドに関する計算された値が含まれています。 FieldHelperProps
には、フィールドの値を強制的に変更できるヘルパー関数が含まれています。
import React from 'react';import { useField } from 'formik';function MyTextField(props) {// this will return field props for an <input />const [field, meta, helpers] = useField(props.name);return (<><input {...field} {...props} />{meta.error && meta.touched && <div>{meta.error}</div>}</>);}function MyInput(props) {// this will return field exactly like <Field>{({ field }) => ... }</Field>const [field, meta] = useField(props);return (<><input {...field} {...props} />{meta.error && meta.touched && <div>{meta.error}</div>}</>);}function MyOtherComponent(props) {// This isn't an input, so instead of using the values in 'field' directly,// we'll use 'meta' and 'helpers'.const [field, meta, helpers] = useField(props.name);const { value } = meta;const { setValue } = helpers;const isSelected = v => (v === value ? 'selected' : '');return (<div className="itemsPerPage"><button onClick={() => setValue(5)} className={isSelected(5)}>5</button><button onClick={() => setValue(10)} className={isSelected(10)}>10</button><button onClick={() => setValue(25)} className={isSelected(25)}>25</button></div>);}
FieldHookConfig<Value>
このオブジェクトは、<Field>
に渡すプロパティのサブセットです。以下のものが含まれます。
name: string
- フィールドの名前validate?: (value: any) => undefined | string | Promise<any>
- <Field>
のドキュメントを参照してください。type?: string
- HTML入力のタイプ(text
、number
など)multiple?: boolean
- 複数の値を選択できるかどうか。value?: string
- タイプ checkbox
および radio
の入力にのみ有効です。 フォームが送信されると、チェックボックスとラジオボタンは指定された value
で送信されます。 詳細については、MDNをご覧ください。FieldInputProps<Value>
以下のものを含むオブジェクトです。
name: string
- フィールドの名前checked?: boolean
- 入力がチェックされているかどうか。これは、useField
に name
、type: 'checkbox'
または type: 'radio'
を含むオブジェクトが渡された場合にのみ定義されます。onBlur: () => void
- blurイベントハンドラonChange: (e: React.ChangeEvent<any>) => void
- changeイベントハンドラvalue: Value
- フィールドの値(values
から取得)。チェックボックスまたはラジオボタン入力の場合は、useField
に渡された value
になる可能性があります。multiple?: boolean
- 複数の値を選択できるかどうか。 これは、useField
に multiple: true
を含むオブジェクトが渡された場合にのみ定義されます。FieldMetaProps<Value>
フィールドに関する計算されたメタデータを含むオブジェクト。具体的には、
error?: string
- フィールドのエラーメッセージ(errors
から取得)initialError?: string
- フィールドが initialErrors
に存在する場合のフィールドの初期エラー(initialErrors
から取得)initialTouched: boolean
- フィールドが initialTouched
に存在する場合のフィールドの初期値(initialTouched
から取得)initialValue?: Value
- フィールドが initialValues
に値が指定されている場合のフィールドの初期値(initialValues
から取得)touched: boolean
- フィールドが訪問されたかどうか(touched
から取得)value: any
- フィールドの値(values
から取得)FieldHelperProps
該当フィールドの値、エラー値、またはtouchedステータスを強制的に変更するために使用できるヘルパー関数を含むオブジェクト。 これは、変更イベントまたはぼかしイベントをトリガーせずに、フィールドのステータスを直接変更する必要があるコンポーネントに役立ちます。
setValue(value: any, shouldValidate?: boolean): Promise<void | FormikErrors>
- フィールドの値を変更する関数。 これにより、validateOnChange
が true
(デフォルト)に設定されている場合、検証が実行されます。 また、2番目の引数として false
を渡すことで、検証を明示的に回避/スキップすることもできます。 validateOnChange
が true
に設定されていてエラーがある場合、返された Promise
で解決されます。
setTouched(value: boolean, shouldValidate?: boolean): void
- フィールドのtouchedステータスを変更する関数。 これにより、`validateOnBlur` が `true`(デフォルト)に設定されている場合、検証が実行されます。 また、2番目の引数として `false` を渡すことで、検証を明示的に回避/スキップすることもできます。 `validateOnBlur` が `true` に設定されていてエラーがある場合、返された `Promise` で解決されます。
setError(value: any): void
- フィールドのエラー値を変更する関数
最新のFormikのニュース、記事、リソースが受信トレイに送信されます。