0

我正在为我的一个项目使用数据选择器,并尝试使用 yup 进行验证。但我要显示一条错误消息,但在选择日期后它不会隐藏。任何帮助深表感谢。

这是我的架构

let schema = yup.object().shape({
    expiry_date: yup.date().required("Please enter expiry date")
});


<Controller
    name="expiry_date"
    control={control}
    render={({ field }) => (
        <DatePicker {...field} selected={startDate} onChange={(date) => onDateChange(date)} />
    )}
/>

{errors.expiry_date && <p className="error">{errors.expiry_date?.message}</p>}
4

1 回答 1

0

您的示例有点不完整,但我能够将日期选择器添加到formik表单中并且它正在工作:

// DatePickerTest.tsx
import React from 'react';
import { FormkiValues, useFormik} from 'formik';
import * as yup  from 'yup';
import DatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';

interface IFormikValues {
  // ... some other
  expiry_date: Date;
}

const validationSchema = yup.object({
// ... some other
expiry_date: yup.date().required("Please enter expiry date")
});


const DatePickerText:React.FC = ():JSX.Element => {
  const formik = useFormik<IFormikValues>({
    initialValues: {
      // ... some other
      expiry_date: new Date()
    },
    validationSchema,
    onSubmit: (values) => {
      alert(JSON.stringify(values, null, 2));
    },
  });
  return (
    <div>
    <form onSubmit={formik.handleSubmit}>
      {/* some other fields */}
      <DatePicker
         id="expiry_date"
         name="expiry_date"
         selected={formik.values.expiry_date}
         onChange={(date) => {
           formik.setFieldValue('expiry_date',date);
         }}

      />
      {formik.errors.expiry_date && <p className="error">{formik.errors.expiry_date}</p>}
      {/* some other fields */}
      <button type="submit" disabled={formik.isSubmitting}>Submit</button>
    </form>
  </div>);
};

export default DatePickerTest;

Yuu 可能会检查您的日期值更新功能onDateChange是否正在更新 formik 值。

于 2021-07-13T08:36:09.343 回答