You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Yup中添加自定义日期验证错误消息并设置失焦触发

解决Formik日期字段Yup验证友好提示及触发时机问题

自定义友好错误消息

首先在Yup验证规则中使用.typeError()替换默认的冗长错误提示:

const validationSchema = Yup.object().shape({
  deceased: Yup.date().typeError('请输入格式为yyyy-mm-dd的有效日期'),
});

调整验证触发时机

默认Formik会在输入字符时(onChange阶段)触发验证,导致每输入一个字符就弹出错误提示。要实现仅在字段失焦时验证,有两种可选方案:

方案1:全局关闭实时验证(影响所有字段)

在Formik组件上设置validateOnChange={false},仅保留失焦和提交时的验证逻辑:

<Formik
  initialValues={{ deceased: '' }}
  validationSchema={validationSchema}
  validateOnChange={false}
  onSubmit={(values) => {
    // 处理表单提交逻辑
  }}
>
  {(formik) => (
    <Form className="formContainer">
      <div className="pb-2">
        <label>Deactivate Member Record</label>
        <ErrorMessage name="deceased" component="span" className="text-red-500" />
        <Field
          autoComplete="off"
          id="inputCreateMember"
          name="deceased"
          placeholder="yyyy-mm-dd"
        />
      </div>
      {/* 其他表单元素 */}
    </Form>
  )}
</Formik>

方案2:仅针对日期字段关闭实时验证

如果其他字段需要保留实时验证,直接在目标Field组件上单独设置validateOnChange={false}:

<Field
  autoComplete="off"
  id="inputCreateMember"
  name="deceased"
  placeholder="yyyy-mm-dd"
  validateOnChange={false}
/>

设置完成后,用户输入日期过程中不会触发验证,只有当字段失焦时,才会校验格式并显示自定义的友好提示。

内容的提问来源于stack exchange,提问作者Jess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:55:19