id: form-submission title: Form 提交

custom_edit_url: https://github.com/jaredpalmer/formik/edit/master/docs/guides/form-submission.md

提交阶段

要在 Formik 中提交表单,您需要以某种方式触发所提供的handleSubmit(e)submitFormprop。当您调用其中任何一种方法时,Formik 每次都执行以下操作 (伪代码)

预提交

  • 触摸所有字段
  • isSubmittingtrue
  • submitCount+ 1

验证

  • isValidatingtrue
  • 运行所有字段级验证,validate,和validationSchema异步并深度合并结果
  • 有什么错误吗?
    • 有:中止提交。设isValidatingfalse,设定errors,设定isSubmittingfalse
    • 没有:设置isValidatingfalse,进入“提交”

提交

  • 继续运行您的提交处理程序(即onSubmit要么handleSubmit
  • 你调用setSubmitting(false)在你的处理程序中完成循环

经常问的问题

如何确定提交处理程序是否正在执行? 如果isValidatingfalse,和isSubmittingtrue
为什么提交前,Formik 会触摸所有字段?? 通常的做法是只在访问过(a.k.a“触摸”)的 UI 中显示输入错误。在提交表单之前,Formik 会触及所有字段,以便所有可能已隐藏的错误现在看得见。
如何防止重复提交? 如果isSubmittingtrue,禁用触发提交的任何内容。
我如何知道我的表单在提交前是何时验证的?? 如果isValidatingtrue,和isSubmittingtrue