如何使用反应表单挂钩验证反应日期选择器

Posted

技术标签:

【中文标题】如何使用反应表单挂钩验证反应日期选择器【英文标题】:How to validate react date picker using react form hook 【发布时间】:2021-09-21 21:28:35 【问题描述】:

我正在为我的一个项目使用数据选择器,并尝试使用 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>

【问题讨论】:

【参考方案1】:

您的示例有点不完整,但我能够将日期选择器添加到 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 值。

【讨论】:

以上是关于如何使用反应表单挂钩验证反应日期选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应日期选择器中动态禁用天数

在日期变量中反应日期范围选择器错误

反应日期选择器日期范围

引导日期选择器和引导验证器

为啥这个组件根本不显示?反应日期选择器

反应日期选择器 - 无效的时间值