Reactjs 如何在Formik中验证提交时的http请求?

Reactjs 如何在Formik中验证提交时的http请求?,reactjs,validation,formik,Reactjs,Validation,Formik,从我所看到的情况来看,submit事件只适用于一些静态检查,比如Yup之类的 我真正需要的是执行一个请求,如/product/store,如果从服务器收到任何错误,则将其显示在表单上 出于逻辑原因,我无法在validate方法中发出该请求,因为。。。这不是屈服。我希望submit发出/product/store请求,如果失败,则设置错误字段 我假设validactionSchema和validate方法仅用于静态检查,如regexp匹配 formik文档中的示例具有误导性,因为它使用了一些无逻辑

从我所看到的情况来看,submit事件只适用于一些静态检查,比如Yup之类的

我真正需要的是执行一个请求,如
/product/store
,如果从服务器收到任何错误,则将其显示在表单上

出于逻辑原因,我无法在validate方法中发出该请求,因为。。。这不是屈服。我希望submit发出
/product/store
请求,如果失败,则设置错误字段

我假设validactionSchema和validate方法仅用于静态检查,如regexp匹配

formik文档中的示例具有误导性,因为它使用了一些无逻辑的setTimeout承诺,但对服务器的实际请求有其含义,并且应该在提交时发出


不需要重复。

假设来自服务器的响应包含错误,您可以使用
setFieldError
功能为字段设置错误

下面的代码假设服务器返回一个错误状态代码,其响应包含以下格式的错误:
[{“field”:“name”,“message”:“name不能为空”。}]

const handleSubmit=(值、操作)=>{
makeSomePostRequest(值)
.then(response=>console.log('success!'))
.catch(错误=>{
/*如果您的服务器在
验证失败,它将移动到捕获部分
您可以使用actions.setFieldError设置错误
以你的形式。
*/
error.response.data.forEach(错误=>{
actions.setFieldError(error.field,error.message)
})
})
.finally(()=>actions.setSubmitting(false))
}

是的,我在某处找到了。福米克的这一部分正在从一个版本转移到另一个版本。此外,如果将handleSubmit定义为async/await,则无需手动设置setSubmitting属性。在最新的(2.1.4)Formik中,操作实际上是一种FormikHelper类型(如果使用TypeScript)。我花了一些时间才发现这一点。。。