withFormik()

指定されたオプションから派生したコンポーネントに、propsとフォームハンドラ(「FormikBag」)を渡す高階Reactコンポーネントクラスを作成します。

import React from 'react';
import { withFormik } from 'formik';
const MyForm = props => {
const {
values,
touched,
errors,
handleChange,
handleBlur,
handleSubmit,
} = props;
return (
<form onSubmit={handleSubmit}>
<input
type="text"
onChange={handleChange}
onBlur={handleBlur}
value={values.name}
name="name"
/>
{errors.name && touched.name && <div id="feedback">{errors.name}</div>}
<button type="submit">Submit</button>
</form>
);
};
const MyEnhancedForm = withFormik({
mapPropsToValues: () => ({ name: '' }),
// Custom sync validation
validate: values => {
const errors = {};
if (!values.name) {
errors.name = 'Required';
}
return errors;
},
handleSubmit: (values, { setSubmitting }) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
setSubmitting(false);
}, 1000);
},
displayName: 'BasicForm',
})(MyForm);

options


リファレンス

options

displayName?: string

内部フォームコンポーネントがステートレス関数コンポーネントの場合、displayNameオプションを使用してコンポーネントに適切な名前を付けることができます。これにより、React DevToolsでコンポーネントを簡単に見つけることができます。指定した場合、ラップされたフォームはFormik(displayName)として表示されます。省略した場合、Formik(Component)として表示されます。このオプションは、クラスコンポーネント(例:class XXXXX extends React.Component {..})には必要ありません。

enableReinitialize?: boolean

デフォルトはfalseです。ラップされたコンポーネントのpropsが変更された場合(深い等価性を使用して)、Formikがフォームをリセットするかどうかを制御します。

handleSubmit: (values: Values, formikBag: FormikBag) => void | Promise<any>

フォーム送信ハンドラです。フォームのvaluesと「FormikBag」が渡されます。「FormikBag」には、注入されたpropsとメソッドのサブセット(つまり、set<Thing>で始まる名前のすべてのメソッド + resetForm)と、ラップされたコンポーネントに渡されたpropsを含むオブジェクトが含まれています。

「FormikBag」

  • props (ラップされたコンポーネントに渡されたprops)
  • resetForm
  • setErrors
  • setFieldError
  • setFieldTouched
  • setFieldValue
  • setStatus
  • setSubmitting
  • setTouched
  • setValues

注:errorstouchedstatus、およびすべてのイベントハンドラはFormikBagには含まれていません。

重要:onSubmitが非同期の場合、Formikは解決されると自動的にisSubmittingfalseに設定します。つまり、formikBag.setSubmitting(false)を手動で呼び出す必要はありません。ただし、onSubmit関が同期的である場合は、自分でsetSubmitting(false)を呼び出す必要があります。

isInitialValid?: boolean | (props: Props) => boolean

2.xで非推奨。代わりにmapPropsToErrorsを使用してください

マウント前にisValid propの初期値を制御します。関数 übergeben もできます。マウント時に送信ボタンとリセットボタンを有効/無効にしたい場合に便利です。

mapPropsToErrors?: (props: Props) => FormikErrors<Values>

このオプションが指定されている場合、Formikはその結果を更新可能なフォーム状態に転送し、これらの値を新しいコンポーネントでprops.errorsとして初期に使用できるようにします。任意のエラー状態をフォームにインスタンス化する場合に便利です。props.errorsは、検証が実行されるとすぐに上書きされることに注意してください。 フォームがリセットされると、Formikはprops.errorsをこの初期値にリセットし、この関数を再実行します。

mapPropsToStatus?: (props: Props) => any

このオプションが指定されている場合、Formikはその結果を更新可能なフォーム状態に転送し、これらの値を新しいコンポーネントでprops.statusとして使用できるようにします。任意の状態をフォームに保存またはインスタンス化する場合に便利です。フォームがリセットされると、statusはこの初期値にリセットされ、この関数が再実行されることに注意してください。

mapPropsToTouched?: (props: Props) => FormikTouched<Values>

このオプションが指定されている場合、Formikはその結果を更新可能なフォーム状態に転送し、これらの値を新しいコンポーネントでprops.touchedとして使用できるようにします。任意のtouched状態(つまり、フィールドにアクセス済みとしてマーク)をフォームにインスタンス化する場合に便利です。 フォームがリセットされると、Formikはこの初期値を使用し、この関数を再実行することに注意してください。

mapPropsToValues?: (props: Props) => Values

このオプションが指定されている場合、Formikはその結果を更新可能なフォーム状態に転送し、これらの値を新しいコンポーネントでprops.valuesとして使用できるようにします。mapPropsToValuesが指定されていない場合、Formikは関数ではないすべてのpropsを内部コンポーネントのprops.valuesにマップします。つまり、省略した場合、Formikはtypeof props[k] !== 'function'(ここで、kはキー)であるpropsのみを渡します。

フォームが親からpropsを受け取っていない場合でも、mapPropsToValuesを使用してフォームの空の状態を初期化します.

validate?: (values: Values, props: Props) => FormikErrors<Values> | Promise<any>

注:バリデーションにはvalidationSchemaとYupを使用することをお勧めします。ただし、validateは、フォームを検証するための依存関係のない簡単な方法です。

関数を使用してフォームのvaluesを検証します。この関数は次のいずれかになります。

  1. 同期してerrorsオブジェクトを返します。
// Synchronous validation
const validate = (values, props) => {
const errors = {};
if (!values.email) {
errors.email = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) {
errors.email = 'Invalid email address';
}
//...
return errors;
};
  • 非同期で、errorsを含むオブジェクトを解決するPromiseを返します。
// Async Validation
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const validate = (values, props) => {
return sleep(2000).then(() => {
const errors = {};
if (['admin', 'null', 'god'].includes(values.username)) {
errors.username = 'Nice try';
}
// ...
return errors;
});
};

validateOnBlur?: boolean

デフォルトはtrueです。このオプションを使用して、blurイベントで検証を実行します。具体的には、handleBlursetFieldTouched、またはsetTouchedが呼び出されたときです。

validateOnChange?: boolean

デフォルトはtrueです。このオプションを使用して、Formikにchangeイベントとchange関連のメソッドで検証を実行するように指示します。具体的には、handleChangesetFieldValue、またはsetValuesが呼び出されたときです。

`validateOnMount?: boolean`

デフォルトは`false`です。 このオプションを使用して、ラップされたコンポーネントがマウントされたとき、または`initialValues`が変更されたときに、Formikに検証を実行するように指示します(優先度は低)。

`validationSchema?: Schema | ((props: Props) => Schema)`

YupスキーマまたはYupスキーマを返す関数。これは検証に使用されます。エラーはキーによって内部コンポーネントの`errors`にマップされます。そのキーは`values`のキーと一致する必要があります。

注入されたpropsとメソッド

これらは`<Formik render={props => ...} />`のpropsと同じです。

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

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

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

Copyright © 2020 Formium, Inc. All rights reserved.