我正在使用 Formik 和 yup 验证,遵循以下模式:
const handleSubmit = async (values, { setStatus }) => {
setStatus(''); // clean errors messages
try {
... do submit work ...
const res = await sendData( convertValues(values)); //
... more work
} catch (e) {
console.error(e);
setStatus('an error occurred '...);
}
};
const validationSchema = Yup.object({
code: Yup.string().required(t('Required')),
....
});
return (
<Formik onSubmit={handleSubmit} initialValues={initialValues} validationSchema={validationSchema}>
{({ setFieldValue, status }) => (
<Form>
....
<MyErrorComponent msg={status} />
</Form>
)}
</Formik>
);
Run Code Online (Sandbox Code Playgroud)
这在这种情况下有问题:
handleSubmit。状态中显示错误消息发生这种情况是因为验证发生在提交之前,因此setStatus('')不会被调用。处理这个问题的推荐方法是什么?
我认为你应该使用这样的东西:
<Formik
initialValues={
firstName: '',
email: ''
}
validationSchema={
Yup.object().shape({
email: Yup.string()
.email("Must be a valid email")
.max(255)
.required("Email is required"),
firstname: Yup.string()
.max(255)
.required("First name is required"),
})
}
onSubmit={(e, { resetForm }) => {
let val = e;
postSubmit (e.firstName,e.email);
// ur rest logic
// resetForm({
// values: {
// ...e,
// },
});
}}
>
{({ handleChange, values, initialValues, errors }) => (
// Your form jsx
)}
</Formik>
Run Code Online (Sandbox Code Playgroud)
不要useState与 formik 一起使用,让 Formik 处理错误和验证!
我确实使用了这种模式并且效果非常好。
如果您没有找到方法,请分享您的表格,我会为您做的!
| 归档时间: |
|
| 查看次数: |
1779 次 |
| 最近记录: |