微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Formik 和 Yup 进行验证时,React Select 不显示错误

如何解决使用 Formik 和 Yup 进行验证时,React Select 不显示错误

大家好,我在我的项目中使用 react-select 以及 Formik 和 Yup 进行验证 即使我在控制台中看到错误对象中的错误,但我无法在前端显示错误

这是下面的代码

export default function FormSection({
  onContinueButton,allFormValues,holders,}) {
  console.log(holders,"hol12");

  const formik = useFormik({
    initialValues: {
      firstBirthDate: "",firstSmoker: "",secondBirthDate: "",secondSmoker: "",},onSubmit: (values,{ setSubmitting }) => {
      console.log(formik.errors);
      console.log(formik.values,"valqwqrwe");

      setSubmitting(false);
      allFormValues(formik.values);
      console.log(values);
    },validationSchema: validationSchemaSectionTwo,});
  const options = [
    { value: "Não",label: "Não" },{ value: "Sim",label: "Sim" },];

  const handleChangeFirstHolder = (selectedOption) => {
    // this.setState({ selectedOption });
    console.log(`Option selected:`,selectedOption);
    formik.setFieldValue("firstSmoker",selectedOption);
  };

  console.log(formik.errors,"********");

  console.log("touchhhhhhhhhhhhhh",formik.touched.firstSmoker);
  return (
    <div className="secondSection">
      <form onSubmit={formik.handleSubmit}>
        <React.Fragment>
          <p className="tab-text">É fumador?</p>
          <Select
            value={formik.values.firstSmoker}
            name="firstSmoker"
            onChange={handleChangeFirstHolder}
            options={options}
            className="select-smoker"
            onBlur={formik.handleBlur}
          />
          {formik.errors.firstSmoker && formik.touched.firstSmoker && (
            <div className="formik-errors">{formik.errors.firstSmoker}</div>
          )}
        </React.Fragment>

        <br />
      </form>
    </div>
  );
}

因此,当我 console.log(formik.erros) 看到我想向用户显示错误时,但是 console.log(formik.touched.firstSmoker) 始终未定义,即使我单击 Select 标签然后没有选择选项单击外部它,我一点击触摸值就应该是真的,但它没有发生

谢谢!

解决方法

您可以明确告诉 Formik 输入已被触摸。最简单的方法是在某处放置一个 setTouched() - 例如内部处理程序 onBlur()

 <Select
   value={formik.values.firstSmoker}
   name="firstSmoker"
   onChange={handleChangeFirstHolder}
   options={options}
   className="select-smoker"
   onBlur={()=> {
       formik.setTouched({ firstSmoker: true });
   }}
/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?