是的,使用对象中的动态键进行验证

Tan*_*cia 7 javascript forms validation object yup

我有一个用于验证的对象,可能如下所示:

const exampleObject = {
  foo: {
    entries: {
      '785bac64-c6ce-4878-bfb8-9cf5b32e2438': {
        name: 'First object',
      },
      '117450da-315b-4676-ad23-edd94a4b6b51': {
        name: 'Second object',
      },
    },
  },
}
Run Code Online (Sandbox Code Playgroud)

对象的键entries是动态的(uuid)。我想验证name任何这些对象中的属性不是空字符串。不过,entries不是必须的,只是要求如果有条目的话,不能包含空字符串。我怎样才能用 Yup 做到这一点?

const exampleObjectValidation = Yup.object().shape({
  foo: Yup.object({
    entries: Yup.object({
      /* what goes here ? */
   })
  })
})
Run Code Online (Sandbox Code Playgroud)

Tan*_*cia 9

我是这样做的:

const exampleObjectValidation = Yup.object()
  .shape({
    foo: Yup.object({
      entries: Yup.lazy((value) => {
        if (!isEmpty(value)) {
          const validationObject = { name: Yup.string().required('Item cannot be empty') }
          const newEntries = Object.keys(value).reduce(
            (acc, val) => ({
              ...acc,
              [val]: Yup.object(validationObject),
            }),
            {}
          )

          return Yup.object().shape(newEntries)
        }
        return Yup.mixed().notRequired()
      }),
    }),
  })
  .nullable()
  .notRequired()
Run Code Online (Sandbox Code Playgroud)