useField()

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>
<Formik
initialValues={{
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]

FieldPropsFieldMetaPropsFieldHelperProps を含む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入力のタイプ(textnumber など)
  • multiple?: boolean - 複数の値を選択できるかどうか。
  • value?: string - タイプ checkbox および radio の入力にのみ有効です。 フォームが送信されると、チェックボックスとラジオボタンは指定された value で送信されます。 詳細については、MDNをご覧ください。

FieldInputProps<Value>

以下のものを含むオブジェクトです。

  • name: string - フィールドの名前
  • checked?: boolean - 入力がチェックされているかどうか。これは、useFieldnametype: 'checkbox' または type: 'radio' を含むオブジェクトが渡された場合にのみ定義されます。
  • onBlur: () => void - blurイベントハンドラ
  • onChange: (e: React.ChangeEvent<any>) => void - changeイベントハンドラ
  • value: Value - フィールドの値(values から取得)。チェックボックスまたはラジオボタン入力の場合は、useField に渡された value になる可能性があります。
  • multiple?: boolean - 複数の値を選択できるかどうか。 これは、useFieldmultiple: 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> - フィールドの値を変更する関数。 これにより、validateOnChangetrue(デフォルト)に設定されている場合、検証が実行されます。 また、2番目の引数として false を渡すことで、検証を明示的に回避/スキップすることもできます。 validateOnChangetrue に設定されていてエラーがある場合、返された Promise で解決されます。

  • setTouched(value: boolean, shouldValidate?: boolean): void - フィールドのtouchedステータスを変更する関数。 これにより、`validateOnBlur` が `true`(デフォルト)に設定されている場合、検証が実行されます。 また、2番目の引数として `false` を渡すことで、検証を明示的に回避/スキップすることもできます。 `validateOnBlur` が `true` に設定されていてエラーがある場合、返された `Promise` で解決されます。

  • setError(value: any): void - フィールドのエラー値を変更する関数

このページは役に立ちましたか?

ニュースレターを購読する

最新のFormikのニュース、記事、リソースが受信トレイに送信されます。

Copyright © 2020 Formium, Inc. All rights reserved.