基于布尔属性的条件字段验证

wen*_*eno 4 javascript validation reactjs yup formik

我希望该favoriteAlcohol字段仅在props.isAdult传递给组件是true.

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

我怎样才能做到这一点?

上面的解决方案不起作用,因为when将表单的“键”作为第一个参数,并且我通过了 prop。

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

Nin*_*Dev 5

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

Yup.object().shape({
  ...favoriteAlcohol,
  name: Yup.string().required('Nazwa jest wymagana'),
})
Run Code Online (Sandbox Code Playgroud)

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

Yup.object().shape({
  favoriteAlcohol: Yup.string().required(),
  name: Yup.string().required('Nazwa jest wymagana'),
})
Run Code Online (Sandbox Code Playgroud)

否则会使

Yup.object().shape({
  name: Yup.string().required('Nazwa jest wymagana'),
})
Run Code Online (Sandbox Code Playgroud)

  • 该代码很有用,但如果您可以添加有关此代码片段如何解决问题的描述,您的答案会更好 (2认同)
  • 感谢您的建议,@Cleptus。编辑了答案。 (2认同)