Formik在空字段上也显示错误

时间:2020-05-10 15:35:36

标签: javascript reactjs react-native formik yup

当我打开屏幕时,直到我第一次提交表单之前,我看不到任何验证错误。正确输入电子邮件地址并通过单击按钮提交表单后,表单逻辑即可正常工作。显示警报,并且该字段已重置(有意)

但是,一旦我关闭警报,Formik仍然会显示一个错误,我必须输入电子邮件地址(必填字段)。是否也可以重置错误?就像我第一次打开屏幕时一样?我希望仅在提交表单而不输入任何内容时出现此错误。

enter image description here

我的代码段:

在此处重置值:

 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>

1 个答案:

答案 0 :(得分:1)

您可以使用setFieldErrorsetErrors

我不确定您确切要在哪里清除错误,但是如果不在表单中,则可以获取ref的formik组件并调用setFieldError或{{1 }}。

例如

setErrors

与您的代码无关的其他问题

执行setFieldError('email', undefined) 并不是一件好事,如果您想重置values.email = '';的值,则应使用setFieldValue,就像您将使用email一样。 / p>

例如

setFieldError