【问题标题】:Yup how to validate mandatory fields on null object是的,如何验证空对象上的必填字段
【发布时间】:2020-06-25 17:31:05
【问题描述】:

我在验证作为(可能)空对象的属性的必填字段时遇到问题。

这是一个示例模式:

object().shape({
   catalog: {
      brand: string().required()
   }
})

如果我尝试针对此架构验证以下对象,则会收到预期的错误:需要品牌。据我了解,为未定义的对象创建了一个默认值,它模仿了模式中对象的形状。这是我期望的行为,也是我想要的。

{ catalog: undefined }

// "catalog.brand is a required field"

但在我的情况下,我没有收到未定义但为 null 的对象。而且我不知道如何使用空值管理相同的结果。

{ catalog: null }

// No error on catalog.brand

手动将 null 转换为 undefined 是不可能的,因为我收到 null 是有充分理由的。

这是一个重现我的用例的代码框:

https://codesandbox.io/s/yup-playground-tbfcj

非常感谢您对此的帮助,谢谢:)

【问题讨论】:

  • 您找到解决方案了吗?我现在正在与同样的问题作斗争。
  • @DávidM。我发现解决问题的唯一方法是在我的验证器中将 null 转换为 undefined :/我没有发布它,因为我认为这不是解决问题的好方法,但我没有其他任何东西此时此刻。它看起来像这样:目录:object().transform(nullToUndefined)。 nullToUndefined 只是检查我的值是否未定义并返回 null 就是这种情况。
  • 我之前在初始值中将 null 转换为 undefined,因此您的解决方案要好得多。和工作!谢谢。

标签: javascript validation yup


【解决方案1】:

解决方案是在形状中同时包含nullable()required()

例子

const requiredOption = Yup.object()
  .shape({
    value: Yup.string(),
    label: Yup.string(),
  })
  .nullable()
  .required('This field is required.');

【讨论】:

    【解决方案2】:

    尝试在您的对象架构中添加strict()

    object().shape({
       catalog: {
          brand: string().required()
       }
    }).strict();
    

    【讨论】:

      【解决方案3】:

      与其他答案相比,这是一种不那么令人费解的方法。这允许您在 subfield 上保留 required 指令,无论包含它的父架构/字段在验证时是否为空。

      yup.object().shape({
        field: yup.object().shape({
          subfield: string().required(),
        }).default(undefined),
      });
      
      // Or...
      
      yup.object().shape({
        field: yup.object().shape({
          subfield: string().required(),
        }).default(null).nullable(),
      });
      

      两者之间的一个区别是,当您 validate 在这些架构中的每一个上提供数据并且缺少 field 时,如果您还传入 stripUnknown,则在第一种情况下,该字段将完全从验证中删除结果,但在第二种情况下,该字段仍会显示,但值为 null

      【讨论】:

        猜你喜欢
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        • 2013-03-23
        相关资源
        最近更新 更多