Formik文档说
https://jaredpalmer.com/formik/docs/guides/form-submission
要在Formik中提交表格,您需要以某种方式解雇提供的表格 handleSubmit(e)或SubmitForm属性。当您呼叫其中任何一个 方法,Formik每次都会执行以下(伪代码):
---- Run all field-level validations, validate, and validationSchema asynchronously and deeply merge results ---
我无法理解表单提交过程。 handleSubmit,onSubmit,submitForm有什么区别。
即使我提供了同步验证功能,验证也总是异步运行吗?
以上三个函数中的哪个异步运行? 他们会返回什么?
答案 0 :(得分:5)
onSubmit
-它是form
组件的本机事件支持。与您的问题无关
我没有使用Formik。但是,如果我们看一下他们的代码:https://github.com/jaredpalmer/formik/blob/26c4f8627a5ecfd81ec2196c7a9687b3f39f2836/packages/formik/src/Formik.tsx#L740
submitForm
-更底层的函数,返回Promise,然后可以处理结果。
handleSubmit
-内部调用submitForm
,如果内部发生错误,则处理所有错误,不返回任何内容。 (https://github.com/jaredpalmer/formik/blob/26c4f8627a5ecfd81ec2196c7a9687b3f39f2836/packages/formik/src/Formik.tsx#L833)
这两个函数都是异步的,因为它们被useEventCallback
包裹了。
默认情况下,总是在触发任何事件submitForm
或handleSubmit
之后才会进行验证。您可以自行编写哪种类型的验证同步或异步操作,取决于第一个validate
示例(https://github.com/jaredpalmer/formik/blob/26c4f8627a5ecfd81ec2196c7a9687b3f39f2836/docs/guides/validation.md#validate)
运行验证时有方法列表,或如何触发它: https://github.com/jaredpalmer/formik/blob/26c4f8627a5ecfd81ec2196c7a9687b3f39f2836/docs/guides/validation.md#validate
答案 1 :(得分:0)
https://github.com/jaredpalmer/formik/issues/1027
“ HandleSubmit可以原样传递给表单的onSubmit事件,而preventDefault。submitForm不能。”