Formik & Yup - 如何为数组和字符串创建模式

H. *_*ner 2 validation reactjs yup formik

我正在使用Formik一种形式的图书库,其中列表中的每个项目看起来像:

author: {
 name: 'string',
 titles: ['string']
}
Run Code Online (Sandbox Code Playgroud)

我在尝试创建一个模式Yup来验证这些字段时遇到了麻烦。我有:

schema = Yup.object().shape({
 author: Yup.object().shape({
  name: Yup.string().min().max().required('...')
 }),
 author: Yup.array().of(
  Yup.object().shape({
   titles: Yup.string().min().max().required('...')
  })
 )
});
Run Code Online (Sandbox Code Playgroud)

初始值也是:

{
 author: {name: ''},
 author: [{ titles: '' }]
}
Run Code Online (Sandbox Code Playgroud)

我的验证适用于数组,但不适用于名称。我假设问题是对象中的两个元素不能具有相同的名称,但是我不知道如何在初始值和模式中组合这两个字段。我查看了 Yup API,我注意到他们有,mixed()但我不明白如何使用我需要的东西来实现。这种方式是否可行,或者是否可以对这两种方式进行验证?

Chr*_* B. 5

Author 不是一个数组,它是一个包含数组和字符串的对象。此外,您要定义它两次:

schema = Yup.object().shape({
 author: Yup.object().shape({
  name: Yup.string().min().max().required('...'),
  titles: Yup.arrayOf(Yup.string())
 }),
});
Run Code Online (Sandbox Code Playgroud)

对为什么你有 2 个作者密钥感到困惑。上面的架构对应于:

{
  author: {
    name: "hehyryg",
    titles: ["title", "title2"]
  }
}
Run Code Online (Sandbox Code Playgroud)