React Formik ErrorMessage 错误总是显示

问题描述

render={({ errors,touched }) => (
        <Form onSubmit={submitBook}>
         <FormGroup>
          <label htmlFor="Name">Full Name</label>
            <Field
              value={book.bookingCustomerName}
              onBlur={() => book.setFieldTouched('Name')}
              onChange={e => setBook({...book,bookingCustomerName: e.target.value})}
              className="form-control"
              name="Name"
              placeholder="Jay Sankar Bhat"
              type="text"
            />
            <ErrorMessage
              name="Name"
              component="div"
              className="field-error text-danger"
            />
         </FormGroup>

这是 Formik 组件。即使将值放入字段中,也会呈现错误消息。为什么会这样? Form Image

完整代码如下:

    let packageType = useParams();
    packageType = packageType.package;
    let history = useHistory();
    let [message,setMessage] = useState({
      msg: '',color: 'danger'
    });
    let [pack,setPack] = useState(0);
    let [price,setPrice] = useState(0);
    let [isApplied,setIsApplied] = useState(false);
    let [isSubmitted,setIsSubmitted] = useState(false);
    let [book,setBook] = useState({
        bookingPackageType: packageType,bookingCustomerName: '',customerMobile: '',bookingDate: '',bookingSlot:'',address: '',comment: '',promoCode: ''
    });

使用 Yup 的预订模式。这用作验证架构:

const BookingSchema = Yup.object().shape({
    bDate: Yup.string()
      .required("inspection Date required"),Name: Yup.string()
      .min(2,"Must be longer than 2 characters")
      .max(50,"Nice try,nobody has a first name that long")
      .required("Name required"),mobile: Yup.string()
      .min(10,"Enter 10 Digits Mobile Number")
      .max(10,"Enter 10 Digits Mobile Number")
      .required("Mobile Number required")
  })

解决方法

这是你需要做的:

{book.bookingCustomerName===""?
<ErrorMessage
              name="Name"
              component="div"
              className="field-error text-danger"
            />
:null}

只需添加一个检查条件,如果您的值为空,则显示错误消息,否则不显示。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...