📌  相关文章
📜  yup.array 不工作 - Javascript (1)

📅  最后修改于: 2023-12-03 15:06:07.266000             🧑  作者: Mango

使用 Yup 验证数组时遇到的问题解决方法

如果您正在使用 Yup 来验证表单数据,那么您可能已经遇到了验证数组时的问题。在本文中,我们将介绍 Yup 中使用数组验证时可能遇到的问题以及如何解决它们。

问题描述

在您的表单中,您可能需要验证一个数组字段。例如,您可能有一个多选列表,其中用户可以选择多个选项,并且要求该字段不能为空。您可能已经使用以下代码来定义该字段:

const schema = Yup.object().shape({
  myArray: Yup.array()
    .required('This field is required.')
})

然而,当您在验证该表单时,您可能会遇到以下错误:

myArray must be a `array` type, but the final value was: `null` (cast from the value `undefined`). If "null" is intended as an empty value be sure to mark the schema as `.nullable()`

这个错误可能是由于您的表单字段的值为 undefined 或者为空值。事实上,您可以使用 nullable() 方法或者是给该字段设置初始值来解决这个问题。然而,即使使用了这些技巧,您可能会遇到更多的问题。

更多问题

以下是可能遇到的更多问题:

问题1:如何验证数组元素的类型?

当您需要验证数组元素的类型时,您可能会尝试使用 of() 方法,如下所示:

const schema = Yup.object().shape({
  myArray: Yup.array()
    .of(
      Yup.string()
        .required('This field is required.')
    )
})

然而,当您在验证该表单时,您却会遇到以下错误:

myArray[0] must be a string type, but the final value was: `null` (cast from the value `undefined`). If "null" is intended as an empty value be sure to mark the schema as `.nullable()`

这个错误可能是由于您的数组元素的值为 undefined 或者为空值。为了解决这个问题,您可以结合使用 nullable()of() 方法:

const schema = Yup.object().shape({
  myArray: Yup.array()
    .of(
      Yup.string()
        .required('This field is required.')
    )
    .nullable()
})
问题2:如何验证数组元素的最小/最大数量?

当您需要验证数组元素的最小/最大数量时,您可能会尝试使用 min()/max() 方法,如下所示:

const schema = Yup.object().shape({
  myArray: Yup.array()
    .min(3, 'You must choose at least three options.')
    .max(5, 'You can choose no more than five options.')
})

然而,当您在验证该表单时,您却会遇到以下错误:

myArray must be a `array` type, but the final value was: `null` (cast from the value `undefined`). If "null" is intended as an empty value be sure to mark the schema as `.nullable()`

这个错误可能是由于您的数组的值为 undefined 或者为空值。为了解决这个问题,您可以结合使用 nullable()min()/max() 方法:

const schema = Yup.object().shape({
  myArray: Yup.array()
    .min(3, 'You must choose at least three options.')
    .max(5, 'You can choose no more than five options.')
    .nullable()
})
结论

使用 Yup 验证数组字段可能遇到各种问题,包括数组值为 undefined 或者为空值、数组元素的值为 undefined 或者为空值以及数组元素的最小/最大数量的验证问题。为了解决这些问题,您可以结合使用 nullable()of()min()/max() 方法。