代码之家  ›  专栏  ›  技术社区  ›  Junaid Farooq

将yup验证应用于数组react的每个元素

  •  0
  • Junaid Farooq  · 技术社区  · 3 年前

    我有一个对象数组,其中每个对象都有这样的值true/false。我在这些选项的基础上准备了一系列对象。

    const getValidatorForField = (customField: ICustomFieldProps) => {
      if (customField !== undefined) {
        let validaionObject: any = {};
        const { type, contact } = customField
        const {
          nameRequired,
          emailRequired,
          phoneRequired,
          extensionRequired,
        } = contact
      
        if (type === 'contact') {
          validaionObject.name = nameRequired ? Yup.string().required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
          validaionObject.email = emailRequired ? Yup.string().email(DEFAULT_ERROR_MESSAGES.EMAIL).required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
          validaionObject.phoneNumber = phoneRequired ? Yup.string().phone('US', false, DEFAULT_ERROR_MESSAGES.PHONE).required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
          validaionObject.extension = extensionRequired ? Yup.string().required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
      
          return Yup.object(validaionObject).shape({});
        } else {
          return null;
        }
      } else {
        return null;
      }
    };
    
    
    const fieldValidators = (customFields: ICustomFieldProps[]) => {
      let tuple: any = customFields.map((val) => {
        return getValidatorForField(val)
      })
    
      return removeEmptyObjects(tuple);
    }
    

    使用上面的代码,它为我提供了一个对象数组,每个字段都有自定义验证,但我无法在中使用此数组

    const stakeHolderStepValidation = (customFields: ICustomFieldProps[]) => {
      console.log(customFields)
      const validationObjects = customFields !== undefined ? fieldValidators(customFields) : customContactValidtion
      return Yup.object().shape({
        ownerToggle: Yup.boolean(),
        owners: Yup.array().of(ownerValidation),
        stakeholders: Yup.array().of(stakeHolderValidation),
        customContacts: Yup.array().of(validationObjects[0]),
      })
    };
    

    这条线路 customContacts: Yup.array().of(validationObjects[0]), 如果我放置完整的数组,作为 validationObjects 它失败了,如果我把它和一个索引值放在一起,它会把第一条规则应用到每个元素。我看到Tuple在新版本的Yup中引入了一种新方法,但我使用的是旧版本,我想使用它。

    摘要:

    我有一个自定义验证对象数组,我想将其用作数组。任何帮助都会很棒。

    0 回复  |  直到 3 年前
    推荐文章