基于 boolean prop 的条件字段验证

Conditional field validation based on boolean prop

仅当传递给组件的 props.isAdulttrue 时,我才希望 favoriteAlcohol 字段为 validated/required。

Yup.object().shape({
  favoriteAlcohol: Yup.string().when(props.isAdult, {
    is: true,
    then: Yup.string().required(),
  }),
  name: Yup.string().required('Nazwa jest wymagana'),
})

我该怎么做?

以上解决方案不起作用,因为 when 将表单的“键”作为第一个参数,我传递了 prop.

一个可行的解决方案是将 prop.isAdult 映射到 isAdult 表单值字段,然后我可以将 'isAdult' 作为第一个参数传递给 when() 函数。不过,这不是最好的解决方案。

const favoriteAlcohol = props.isAdult ? {favoriteAlcohol: Yup.string().required()} : {}

Yup.object().shape({
  ...favoriteAlcohol,
  name: Yup.string().required('Nazwa jest wymagana'),
})

如果props.isAdult = true 那么,它将

Yup.object().shape({
  favoriteAlcohol: Yup.string().required(),
  name: Yup.string().required('Nazwa jest wymagana'),
})

否则会使

Yup.object().shape({
  name: Yup.string().required('Nazwa jest wymagana'),
})