如果另一个字段具有使用对象数组的值,则有条件地需要字段

conditionally required field if another field has a value using array of objects

我想将一个字段设为必填,但前提是第一个字段有一些值。

我知道我可以做这样的事情,如果这不是对象数组,则使用 when,但既然是,验证就不起作用。

myFieldArray: yup.array().of(
  yup.object().shape({
    firstField: yup.string(),
    secondField: yup.string().when("firstField", {
      is: (firstField) => firstField.length > 0,
      then: yup.string().required("this field is required"),
    }),
  })
)

我也尝试过使用 yup.ref,但是“when”不接受 refs,只接受字符串

myFieldArray: yup.array().of(
  yup.object().shape({
    firstField: yup.string(),
    secondField: yup.string().when(yup.ref("firstField"), {
      is: (firstField) => firstField.length > 0,
      then: yup.string().required("this field is required"),
    }),
  })
)

这个有效

myArray: Yup.array().of(
    Yup.object().shape({
        firstField: Yup.string(),
        secondField: Yup.string().when("firstField", {
            is: firstField => firstField && firstField.length > 0,
            then: Yup.string().required("this field is required")
        })
    })
)

代码沙箱 => https://codesandbox.io/s/react-formik-yup-forked-wcfkh?file=/src/App.js