我有一个简单的 Formik 表单,其中 Submit 方法仅输出到控制台。结构是
// Submit Form: Custom method referenced in Formik
const submitForm = async (formValues) => {
console.log(JSON.stringify(formValues));
};
<Formik
enableReinitialize
validationSchema={schema}
onSubmit={ (values) => {
submitForm(values); // call my custom Submit method above
}}
initialValues={initialFormValues}
>
{
({handleSubmit, handleChange, values, touched, errors, isSubmitting})
=> (
<Form onSubmit={handleSubmit}> {/* Form starts here */}
...
<Button type="submit" disabled={isSubmitting}>Search</Button>
</Form>
)
}
</Formik>
Run Code Online (Sandbox Code Playgroud)
如果存在验证错误,则单击后“提交”按钮会正确地启用。但是,如果没有验证错误,我会输出到控制台,并且即使完成,“提交”仍保持禁用状态。在此示例中什么时候isSubmitting设置回 FALSE?
dig*_*eed 29
一点也不。Formik 不知道您的提交何时完成,因此您需要自己完成。正是出于这个原因,Formik 实际上将 setter 传递到您的提交处理程序中。
将您的代码更改为:
onSubmit={(values, { setSubmitting }) => {
submitForm(values, setSubmitting);
}}
Run Code Online (Sandbox Code Playgroud)
然后在您的submitForm方法中,setSubmitting(false)完成后调用,例如在finally块中。
| 归档时间: |
|
| 查看次数: |
20867 次 |
| 最近记录: |