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 每次都执行以下操作 (伪代码) :

预提交

  • 触摸所有字段
  • 设isSubmitting为true
  • 增submitCount+ 1

验证

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

提交

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

经常问的问题

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