reactjs - 如何在Formik提交验证之前清除状态?
问题描述
我正在使用带有 yup 验证的 Formik,遵循以下模式:
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>
);
这在这种情况下有问题:
- 用户提交表单。验证通过,但内部发生了一些错误
handleSubmit
。状态中显示错误消息 - 用户编辑表单并重试
- 这次发生验证错误
- 验证错误显示在输入字段内......但旧的状态消息未清除。
发生这种情况是因为验证发生在提交之前,因此setStatus('')
不会被调用。处理此问题的推荐方法是什么?
解决方案
它对 onMouseDown 事件有一个验证过程。您可以通过防止提交按钮上的默认设置来避免重复验证。
onMouseDown={(event: any): void => {
event.preventDefault();
}}
之后Formik自动清除状态
推荐阅读
- oracle - Oracle DB ORA-26804:应用 xstream 已禁用
- spring-boot - Spring Boot 在 WEB-INF/lib 错误中添加外部 jar
- c# - 对象是用我无法改变的自己的旋转实例化的
- reactjs - 使用
代替 - python - 导入 SQLAlchemy 时得到:AttributeError:模块“时间”没有属性“时钟”
- python - 如何在 scikit learn 列选择器管道中只选择几列?
- javascript - 如何通过单击按钮启动 html 表单,然后按钮消失并且表单出现在屏幕上?
- javascript - 使用 Lodash 从 JSON 数据创建导航栏菜单
- css - 如何在 vuetify 中更改样式 prev-icon 和 next-icon 道具
? - c# - 将多个子组件作为参数传递