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のニュース、記事、リソースが受信トレイに送信されます。