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

问题描述

仅当传递给组件的favoritealcoholprops.isAdult时,我才希望验证true字段。

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(),})

否则,它将成功

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...