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

React中使用Yup条件校验时出现branch is not a function错误排查

问题原因与解决方案

核心错误原因

  1. Yup when方法使用错误:在contactDate的when配置中,then回调不应创建新的Yup.date()实例,而是要基于当前字段的Schema扩展校验规则。原代码中then: Yup.date().required(...)会生成新的Schema对象,破坏Yup内部的分支校验逻辑,导致branch is not a function错误。
  2. boolean字段的冗余校验:isContacted字段的required()完全多余,因为boolean类型的false本身就是合法值,该校验仅会要求字段存在,而你的初始值已经设置为false,这个规则只会徒增不必要的校验逻辑。
  3. 日期字段未允许空值:contactDate字段未配置.nullable(),当isContacted为false时,contactDate的值是null,而默认的Yup.date()不接受null,导致校验失败,无法点击保存按钮。

修正后的Schema代码

const RefereeFormSchema = Yup.object().shape({
  name: Yup.string().required('Name is required'),
  mobile: Yup.string().matches(APP_CONFIG.REGEX_PHONE, 'Invalid Mobile').required('Mobile is required'),
  relationship: Yup.string().required('Relationship is required'),
  isContacted: Yup.boolean(), // 移除多余的required()
  contactDate: Yup.date()
    .nullable() // 允许字段为null
    .when('isContacted', {
      is: true,
      then: schema => schema.required('Contact date is required'), // 基于当前Schema扩展规则
    }),
});

额外说明

修正后,当isContacted为true时,contactDate会触发必填校验;当isContacted为false时,contactDate允许为null,不会触发校验错误,同时也解决了branch is not a function的报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:15:23