formik中的submitForm、handleSubmit、onSubmit有什么区别?

sav*_*vvy 6 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
---
Run Code Online (Sandbox Code Playgroud)

我无法理解表单提交过程。handleSubmit、onSubmit、submitForm 有什么区别。

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

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

小智 6

onSubmit- 它是form组件的原生事件道具。这与你的问题无关


我没用过Formik。但是如果我们看一下他们的代码:https : //github.com/jaredpalmer/formik/blob/26c4f8627a5ecfd81ec2196c7a9687b3f39f2836/packages/formik/src/Formik.tsx#L740

submitForm- 更底层的函数,返回 Promise,然后你可以处理结果。 handleSubmit- 在 invokesubmitForm内部,如果发生在内部,则处理所有错误,不返回任何内容。( 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


Fra*_*ena 0

https://github.com/jaredpalmer/formik/issues/1027

“HandleSubmit 可以按原样传递给表单的 onSubmit 事件和 PreventDefault。submitForm 则不能。”