指定されたオプションから派生したコンポーネントに、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}><inputtype="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 validationvalidate: 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を含むオブジェクトが含まれています。
props
(ラップされたコンポーネントに渡されたprops)resetForm
setErrors
setFieldError
setFieldTouched
setFieldValue
setStatus
setSubmitting
setTouched
setValues
注:errors
、touched
、status
、およびすべてのイベントハンドラはFormikBag
には含まれていません。
重要:
onSubmit
が非同期の場合、Formikは解決されると自動的にisSubmitting
をfalse
に設定します。つまり、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
を検証します。この関数は次のいずれかになります。
errors
オブジェクトを返します。// Synchronous validationconst 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 Validationconst 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
イベントで検証を実行します。具体的には、handleBlur
、setFieldTouched
、またはsetTouched
が呼び出されたときです。
validateOnChange?: boolean
デフォルトはtrue
です。このオプションを使用して、Formikにchange
イベントとchange
関連のメソッドで検証を実行するように指示します。具体的には、handleChange
、setFieldValue
、またはsetValues
が呼び出されたときです。
デフォルトは`false`です。 このオプションを使用して、ラップされたコンポーネントがマウントされたとき、または`initialValues`が変更されたときに、Formikに検証を実行するように指示します(優先度は低)。
YupスキーマまたはYupスキーマを返す関数。これは検証に使用されます。エラーはキーによって内部コンポーネントの`errors`にマップされます。そのキーは`values`のキーと一致する必要があります。
これらは`<Formik render={props => ...} />`のpropsと同じです。
最新のFormikのニュース、記事、リソースが受信トレイに送信されます。