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

基于Prop条件渲染字段:如何用Yup实现react-hook-form条件必填验证?

根据后端Prop动态控制Yup表单字段的必填性

你可以通过两种简单方式实现这个需求,基于后端传入的Prop动态调整premium_subscription字段的验证规则:

方法一:直接根据Prop值生成对应规则

这种方式最直观,直接判断Prop是否存在(或是否为true),决定是否给字段添加.required():

// 假设后端传入的Prop名为requirePremiumSubscription
const subscriptionSchema = yup.object().shape({
  premium_subscription: requirePremiumSubscription 
    ? yup.bool().required('请选择是否开通高级订阅') 
    : yup.bool(),
  comments: yup.string(),
  keep_your_plan: yup.string().required()
});

方法二:使用Yup的when条件验证

如果后续需要更复杂的条件判断(比如依赖表单内其他字段),可以用when方法,这里我们基于外部Prop做判断:

const subscriptionSchema = yup.object().shape({
  premium_subscription: yup.bool()
    .when([], {
      // 通过箭头函数获取外部的Prop值
      is: () => requirePremiumSubscription,
      then: schema => schema.required('请选择是否开通高级订阅'),
      otherwise: schema => schema.notRequired()
    }),
  comments: yup.string(),
  keep_your_plan: yup.string().required()
});

额外提示:配合字段渲染逻辑

如果Prop不存在时不需要显示这个字段,还可以在组件里做条件渲染,确保用户看不到不需要的输入项:

{requirePremiumSubscription && (
  <div className="form-group">
    <label>是否开通高级订阅</label>
    <input
      type="checkbox"
      {...register('premium_subscription')}
    />
  </div>
)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:21:03