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

Formik+Yup字段数组深层验证:年份关联日期字段提示问题

解决Formik嵌套字段数组的条件验证问题

直接给你修正后的验证方案,核心是调整Yup的when依赖和字段引用逻辑:

validationSchema={Yup.object({
  title: Yup.string().required("名称必填"),
  year: Yup.string().required('请选择年份,日期选项已禁用'),
  holidays: Yup.array().of(
    Yup.object().shape({
      name: Yup.string().required("名称必填"),
      date: Yup.string().when('$year', {
        is: (yearVal) => !yearVal,
        then: Yup.string().required('请先选择年份'),
        otherwise: Yup.string().required('此字段必填')
      })
    })
  )
}, ['year'])}

关键修正点:

  • 移除冗余依赖:原代码里when传入了holidays作为依赖,但我们只需要根据父级的year字段判断,完全不需要依赖当前的字段数组本身,删掉后避免不必要的验证触发。
  • 明确父级字段引用:用$year语法明确指定引用的是顶级表单的year字段,避免嵌套对象作用域导致的字段获取失败问题。
  • 简化判断逻辑:用!yearVal替代yearVal === "",更简洁地覆盖年份未选择的所有空值场景(比如undefined、空字符串)。
  • 调整顶级依赖数组:只保留year作为顶级依赖,确保年份变化时,整个holidays数组的验证会重新执行,保证提示信息实时更新。

结合你已经实现的「年份未选时日期选择器禁用」的交互,这个验证逻辑会完美匹配需求:

  • 未选年份:日期框禁用,验证提示「请先选择年份」
  • 已选年份:日期框可用,验证提示「此字段必填」

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:10:34