フォーム送信

送信フェーズ

Formikでフォームを送信するには、提供されたhandleSubmit(e)またはsubmitFormプロップを何らかの方法で呼び出す必要があります。これらのメソッドのいずれかを呼び出すと、Formikは毎回以下の(擬似コード)を実行します。

送信前

  • すべてのフィールドにタッチします。initialValuesは必須であり、常に指定する必要があります。#445を参照してください。
  • isSubmittingtrueに設定します。
  • submitCountを1インクリメントします。

バリデーション

  • isValidatingtrueに設定します。
  • すべてのフィールドレベルのバリデーション、validate、およびvalidationSchemaを非同期で実行し、結果を深くマージします。
  • エラーがありますか?
    • はい:送信を中止します。isValidatingfalseに設定し、errorsを設定し、isSubmittingfalseに設定します。
    • いいえ:isValidatingfalseに設定し、「送信」に進みます。

送信

  • 送信ハンドラ(つまり、onSubmitまたはhandleSubmit)の実行に進みます。
  • 送信ハンドラはPromiseを返しましたか?
    • はい:解決または拒否されるまで待ち、その後setSubmittingfalseに設定します。
    • いいえ:サイクルを終了するためにsetSubmitting(false)を呼び出します

よくある質問

送信ハンドラが実行されているかどうかをどのように判断しますか?

isValidatingfalseで、isSubmittingtrueの場合。

Formikが送信前にすべてのフィールドにタッチするのはなぜですか?

入力のエラーをUIに表示するのは、訪問された(別名「タッチされた」)場合のみという一般的な慣習です。フォームを送信する前に、Formikはすべてのフィールドにタッチするため、非表示になっていた可能性のあるすべてのエラーが表示されるようになります。

二重送信をどのように防止しますか?

isSubmittingtrueの場合、送信をトリガーしているものを無効にします。

送信前にフォームが検証されていることをどのように知ることができますか?

isValidatingtrueで、isSubmittingtrueの場合。

送信後も`isSubmitting`がtrueのままになるのはなぜですか?送信ハンドラがPromiseを返す場合、呼び出されたときに正しく解決または拒否されるようにしてください。

送信ハンドラがPromiseを返さない場合、ハンドラの最後にsetSubmitting(false)が呼び出されていることを確認してください。

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

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

最新のFormikニュース、記事、リソースをあなたの受信箱に送信します。

Copyright © 2020 Formium, Inc. All rights reserved.