Formik/yup 验证不会触发错误消息

问题描述

我需要验证用户年龄,必须是 18 岁或以上。在 console.log 中,如果用户小于 18 岁,它会返回 false,为什么它不会触发错误消息?我哪里做错了

dob: Yup.date()
      .required('required')
      .test('You must be 18 or older',(birthdate) => {
        const cutoff = new Date();
        cutoff.setFullYear(cutoff.getFullYear() - 18);
        console.log('birthdate <= cutoff',birthdate <= cutoff); 
        return birthdate <= cutoff;
      }),

enter image description here

  <Formik
    initialValues={formValues || initialValues}
    validationSchema={validationSchema}
    enableReinitialize
    onSubmit={onSubmit}
    onChange={onSubmit}
    validateOnMount
  >
    {(formik) => {
      return (
        <Form>
          <div className={classes.formBlock}>
            <div className={classes.formWrapper}>
              {Object.keys(initialValues.mainData).map((item,idx) => {
                if (item === 'dob') {
                  return (
                    <div className={classes.formControl} key={idx}>
                      <label className={classes.labelStyle} htmlFor={item}>
                        {translates[item]}
                      </label>
                      <Field
                        name={`mainData.${item}`}
                        className="MuiInputBase-input"
                      >
                        {({ form,field }) => {
                          const { setFieldValue } = form;
                          const { value } = field;
                          return (
                            <Flatpickr
                              id={item}
                              className={classes.calendarWrapper}
                              options={{
                                dateFormat: 'd.m.Y',locale: Russian,allowInput: true,}}
                              onChange={(val) => {
                                console.log('val',{ val,value });
                                setFieldValue(
                                  `mainData.${item}`,val
                                );
                              }}
                              value={value}
                            />
                          );
                        }}
                      </Field>

                      <ErrorMessage name={`mainData.${item}`}>
                        {(error) => (
                          <div className={classes.inoutError}>{error}</div>
                        )}
                      </ErrorMessage>
                    </div>
                  );
                }
              })}
            </div>
          </div>

        </Form>
      );
    }}
  </Formik>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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