如何在Yup验证中验证带有键的对象

时间:2020-05-11 17:18:52

标签: javascript reactjs formik yup

这是我使用Formik的React应用程序中的代码段。

我的初始值为

initialValues: {
    country: { label: '', value: '' }
}

我的字段输入是country,这是一个Select选项,其值在被选择时将为

country: { label: 'India', value: 'India' }

未选择error时,我需要的country对象应该是

{ country: "Please select a country" }

在未选择国家/地区或以其他方式country.value === ''时,如何添加验证确认以获取所需的错误?

我写了这样的验证

country: yup.object().shape({
        value: yup
            .string()
            .label('Country')
            .required("Please select a country"),
})

这是错误的,因此错误对象为country: { value: "Please select a country" },这不是我的要求。

我应该在这里做什么更改?

2 个答案:

答案 0 :(得分:0)

value: ''被认为是字符串的缺失值,因此除.required()之外的大多数验证都忽略它。在这种情况下,您可以:

  • 设置默认国家/地区值
  • 或删除.required()规则。

答案 1 :(得分:0)

我找到了答案,如下。

country: yup
        .object()
        .test(
          'country', 
          'Please select Country', 
          val => !val.value ? false : true,
        )

这将检查value对象内的country键是否为空,并返回false是否为空,并且将根据需要将给定的错误直接分配给country对象。 / p>