formik中的SubmitForm,handleSubmit,onSubmit和有什么区别?

时间:2019-07-12 12:09:15

标签: formik

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有什么区别。

即使我提供了同步验证功能,验证也总是异步运行吗?

以上三个函数中的哪个异步运行? 他们会返回什么?

2 个答案:

答案 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包裹了。

默认情况下,总是在触发任何事件submitFormhandleSubmit之后才会进行验证。您可以自行编写哪种类型的验证同步或异步操作,取决于第一个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不能。”