Formik 文档 说
https://jaredpalmer.com/formik/docs/guides/form-submission
要在 Formik 中提交表单,您需要以某种方式触发提供的 handleSubmit(e) 或 submitForm 道具。当您调用其中任何一个方法时,Formik 每次都会执行以下(伪代码):
Run Code Online (Sandbox Code Playgroud)---- Run all field-level validations, validate, and validationSchema asynchronously and deeply merge results ---
我无法理解表单提交过程。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.
默认情况下,在您触发任何事件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
https://github.com/jaredpalmer/formik/issues/1027
“HandleSubmit 可以按原样传递给表单的 onSubmit 事件和 PreventDefault。submitForm 则不能。”