javascript - Formik - 如何清除字段并显示自定义错误
问题描述
我在 React 中使用 Formik 来创建登录表单。如果用户输入了错误的登录信息,我想:
- 清除密码字段。
- 将密码字段重置为未触及,这样就不会触发密码错误消息。
- 显示自定义错误消息,告诉用户他们的详细信息未被识别。
const onSubmit = (values, { setTouched, setFieldValue, setFieldError, setSubmitting }) => {
// do some login stuff
// on login error, do the following:
setTouched({});
setFieldValue('password', '');
setFieldError('general', "Oops! Sorry, we couldn't log you in.");
};
这些事情中的每一个(setTouched、setFieldValue、setFieldError)都是单独工作的,但如果我一次完成所有这些事情,那么我的自定义一般错误不会显示。
我猜这是某种异步的事情,导致这些事情发生乱序并隐藏错误,但我不确定。
任何人都可以帮助我想要实现的目标吗?谢谢!
编辑
我随后尝试使用resetForm
但没有成功。发生同样的事情 - 重置表单然后设置字段错误无效:
const onSubmit = (values, { resetForm, setFieldError, setSubmitting }) => {
login(values).catch(() => {
// do some login stuff
// on login error, do the following:
resetForm();
setFieldError('general', "Oops! Sorry, we couldn't log you in.");
setSubmitting(false);
});
};
但是,我使用超时取得了一些成功。即使是 1 毫秒的超时实际上似乎也能完成工作并解决问题:
const onSubmit = (values, { setFieldTouched, setFieldValue, setFieldError, setSubmitting }) => {
login(values).catch(() => {
// do some login stuff
// on login error, do the following:
setFieldTouched('password', false);
setFieldValue('password', '');
setTimeout(function () {
setFieldError('general', "Oops! Sorry, we couldn't log you in.");
}, 1);
setSubmitting(false);
});
};
解决方案
推荐阅读
- javascript - 网站 URL 验证
- python - 使用已知的 python 包来实现 N-Gram、TF-IDF 和余弦相似度
- arrays - 类实例化时的 PowerShell 数组空问题
- mysql - 当json doc具有多个具有不同值的相同键作为数组的一部分时,如何从mysql DB查询json doc
- jquery - WooCommerce Ajax 添加到购物车不适用于自定义产品盒捆绑产品插件
- node.js - 为什么在 rxjs 中,除非我使用 from 函数,否则 observable 不会被视为这样?
- kubernetes - OpenWhisk Api 中缺少whisk.system 命名空间
- java - 服务器和客户端之间的同步计时器 - node js / android / socket io
- python - 无法使用我的刮板中的方法生成的链接
- json - 如何动态忽略杰克逊序列化的属性