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

Posted

技术标签:

【中文标题】如果另一个字段具有使用对象数组的值,则有条件地要求字段【英文标题】:conditionally required field if another field has a value using array of objects 【发布时间】:2022-01-20 20:42:14 【问题描述】:

我想让一个字段成为必填字段,但前提是第一个字段具有某些值。

我知道我可以做这样的事情,如果这不是对象数组,则使用 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”不接受引用,只接受字符串

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"),
    ),
  )
)

【问题讨论】:

【参考方案1】:

这个成功了

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

【讨论】:

@Sku,看看这个!! 不知道是不是 react-hook-form 的问题,这个其实是不行的 我明白了。如果我有时间,我也会在 react-hooks-form 中检查一下

以上是关于如果另一个字段具有使用对象数组的值,则有条件地要求字段的主要内容,如果未能解决你的问题,请参考以下文章

如果前一列包含值,则有条件地填充列?

如果地图值等于特定文本,则有条件地呈现 <a href> [重复]

使用 Fluent Validation 进行条件验证

如果某个字段的值受另一个字段值作为条件控制

如果基于一个字段的所有行在另一个字段上具有不同的值,则 JOOQ 查询返回一个布尔值

如果字符串数组中的列名在字符串数组中具有匹配的值,则获取DataRow