Formik 在空字段上也显示错误

Posted

技术标签:

【中文标题】Formik 在空字段上也显示错误【英文标题】:Formik Showing Error on Empty Field As Well 【发布时间】:2020-08-26 02:21:10 【问题描述】:

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

但是,一旦我关闭警报,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>

【问题讨论】:

【参考方案1】:

您可以使用setFieldErrorsetErrors

我不确定你到底想在哪里清除错误,但如果不在表单内,你可以获取 formik 组件的 ref 并调用 setFieldErrorsetErrors

例如

setFieldError('email', undefined)

其他与问题无关的代码观察结果

values.email = ''; 不是一件好事,如果你想重置email 的值你应该使用setFieldValue,就像你会使用setFieldError

例如

helpers.setFieldValue('email', '')

【讨论】:

setFieldError 和 setErrors 只能在 Formik 包装器中使用,对吧?如果我将它们与handleSubmit、值等一起传递。那会重置错误吗? @a125 正如我在回答中所说,您可以在 formik 包装器之外使用 setFieldErrorsetErrors 。如果您对如何获取ref 和调用setFieldError 感到困惑,您可以查看this answer,其中显示了如何调用handleSubmit。在你的情况下是一样的,但不是handleSubmit,你会打电话给setFieldError

以上是关于Formik 在空字段上也显示错误的主要内容,如果未能解决你的问题,请参考以下文章

如何动态访问嵌套错误/触及formik字段

如何默认 formik 日期和时间字段以显示占位符值

如何在 formik 字段组件中显示自定义 <Errormessage> 并禁用默认消息

Formik 中如何保存输入字段中的数据

如何通过打字稿在Formik中添加强类型字段?

带有formik的验证字段