javascript - Formik 在空字段上也显示错误
问题描述
当我打开屏幕时,在我第一次提交表单之前,我看不到任何验证错误。正确输入电子邮件地址并通过单击按钮提交表单后,表单逻辑将正常工作。显示警报并重置字段(有意)
但是,一旦我关闭警报,Formik 仍然向我显示一个错误,我必须输入电子邮件地址(必填字段)。是否也可以重置错误?就像我第一次打开屏幕时一样?我希望此错误仅在我提交表单而不输入内容时出现。
我的代码片段:
在此处重置值:
const initialValues: FormValues = {
email: '',
};
const handleSubmitForm = React.useCallback(
(values: FormValues, helpers: FormikHelpers<FormValues>) => {
console.log('Submitted');
loadUsers({
variables: {
where: { email: values.email },
},
});
values.email = '';
},
[loadUsers],
);
<Formik
initialValues={initialValues}
onSubmit={handleSubmitForm}
validationSchema={validationSchema}>
{({
handleChange,
handleBlur,
handleSubmit,
values,
}) => (
<View style={styles.searchFieldContainer}>
<View
style={styles.form}
>
<FieldInput
handleChange={handleChange}
handleBlur={handleBlur}
value={values.email}
fieldType="email"
/>
<ErrorMessage
name="email"
render={(msg) => (
<Text style={styles.errorText}>
{msg}
</Text>
)}
/>
</View>
<View style={styles.buttonContainer}>
<Button
rounded
style={styles.button}
onPress={handleSubmit}>
<Text style={styles.text}>
Add Friend{' '}
</Text>
</Button>
</View>
</View>
)}
</Formik>
解决方案
您可以使用setFieldError
或setErrors
。
我不确定您要清除错误的确切位置,但如果不在表单内,您可以获取ref
formik 组件的 a 并调用setFieldError
or setErrors
。
例如
setFieldError('email', undefined)
关于您的代码的其他与问题无关的观察结果
这样做values.email = '';
不是一件好事,如果你想重置email
你应该使用的值setFieldValue
,就像你将使用的一样setFieldError
。
例如
helpers.setFieldValue('email', '')
推荐阅读
- r - R代码,导入需要行绑定,但宽度不同的定宽文件
- docker - 通过使用 docker api 创建服务(群模式)将 2 个 docker 容器链接在一起
- angular - 如何实例化角度组件类?
- c++ - 如何摆脱标题依赖?
- angular - (编辑 Angular 5)我无法获取 NgModel 中对象的值
- random - 随机浮点数 - 统一 wrt 连续数线
- javascript - 在定义另一个组件后的括号中放一个节点组件名称
- r - 子集后小标题中的行号 - R编程
- git - 将 git 存储库从 Github 自动移动到 Gerrit
- c# - 数据存储库实例 Null - NullReferenceException?你调用的对象是空的