Formik +是:如何验证一种位置模式,其中字段(国家,州,城市)不是必填项,但是如果填写了一个字段,则应填写每个字段?

时间:2019-05-04 12:36:47

标签: reactjs formik yup

我具有以下架构

validationSchema={yup.object().shape({
  firstName: yup
    .string()
    .required("Name cannot be empty")
    .matches(NAME_REGEX, "Name can only contain english characters"),
  lastName: yup
    .string()
    .required("Name cannot be empty")
    .matches(NAME_REGEX, "Name can only contain english characters"),
  location: yup
    .object()
    .nullable()
    .shape({
      country: yup.string().required(),
      state: yup.string().required(),
      city: yup.string().required()
    })
})}

firstNamelastName的验证工作正常,但我不知道如何验证location
要求:完全不需要填写location。但是,如果该字段的任何内容(country / statecity)都已填写,则必须全部填写三个。要么全部要么全不。

尽管我尝试如上所述进行验证,但无法正常工作。

另一个验证要求是:从select html元素中选择这些值,其中第一个<option><option key={0}>-select-</option>。因此,我不希望我的用户也选择此选项。到目前为止,我正在onSubmit中通过检查这些值来处理它,如果它们包含-select-,则将不考虑这些值,并将其替换为现有的值。

更新
location永远不能为null。如果用户尚未设置任何位置字段,则location也将是:

location: {
   country: null,
   state: null,
   city: null
}

location永远不能为null,只有其属性可以为空。

我应该如何进行这些验证?

1 个答案:

答案 0 :(得分:1)

您必须使用mixed.default(value)SELECT md.*, v.LastFirst FROM MST_MEMBER_DEMOGRAPHICS md CROSS JOIN (VALUES (md.LastName + md.FirstName)) v(LastFirst) WHERE md.GroupID = 'abcCompany' AND md.PersonType = 'D' AND v.LastFirrst IN ('LastName1FirstName1', 'LastName2FirstName2', 'LastName3FirstName3',.....etc) 的默认值设置为null,如下所示:

location

更新

  

location永远不能为null,只有其属性可以为空。

您可以这样做:

location: yup
    .object()
    .default(null)
    .nullable()
    .shape({
      country: yup.string().required(),
      state: yup.string().required(),
      city: yup.string().required()
    })