代码之家  ›  专栏  ›  技术社区  ›  Snekse Kevin Bourrillion

如何压缩“何时”验证

  •  0
  • Snekse Kevin Bourrillion  · 技术社区  · 7 年前

    when 所有这些领域?

    const requiredForDiffAddress = {
        is: false,
        then: Yup.string().required()
    };
    
    export const BillingAddressYupValidationSchemaShape = {
      useShippingAddress: Yup.boolean().default(true).required(),
      street: Yup.string()
          .when('useShippingAddress', requiredForDiffAddress),
      city: Yup.string()
          .when('useShippingAddress', requiredForDiffAddress),
      state: Yup.string()
          .when('useShippingAddress', requiredForDiffAddress),
      zipCode: Yup.string()
          .when('useShippingAddress', requiredForDiffAddress),
    };
    

    或者是更现实更复杂的样本

    const buildRequiredForDiffAddress = requiredText => ({
        is: false,
        then: Yup.string().required(requiredText)
    });
    
    export const BillingAddressYupValidationSchemaShape = {
      useShippingAddress: Yup.boolean().default(true).required(),
      street1: Yup.string().when('useShippingAddress', 
          buildRequiredForDiffAddress("How will we know where to send your order?")),
      city: Yup.string().when('useShippingAddress', 
        buildRequiredForDiffAddress("What city do you live in?")),
      state: Yup.string().when('useShippingAddress',
        buildRequiredForDiffAddress("State please!")),
      zipCode: Yup.string().when('useShippingAddress', 
          buildRequiredForDiffAddress("Zip Code please!")),
    };
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Snekse Kevin Bourrillion    7 年前

    扩展答案

    messaging the creator of Yup .

    他建议说

    与a混合 requiredIf 方法来封装这类东西

    lazy . 延伸路线似乎比懒惰路线好,但最终,我觉得我拥有的可能是最好的解决方案。

    https://codesandbox.io/s/xk4r7nq9z

    * …并且您需要每个字段的自定义错误消息。如果您对默认消息没有问题,那么所发布的示例可能不是最简单的解决方案。