reactjs 如何在两个yup模式之间共享字段的值

jvidinwx  于 2023-10-17  发布在  React
关注(0)|答案(1)|浏览(97)

我正在构建一个多步骤表单,其中每个步骤都是自己的表单,并具有自己的验证模式。我使用react-hook-form的形式(不认为这在这里的问题)和yup的验证,所以这里是一个简化的版本,我试图做什么

export const page1Schema = yup.object().shape({
  ["signature"]: yup.string().required(),
});

export const page2Schema = yup.object().shape({
  ["dependentField"]: yup.string().when(["signature"], {
    is: (signature) => signature !== "",
    then: () => yup.string().required(),
    otherwise: () => yup.string().notRequired(),
  })
});

因此,在page 2Schema中,我想访问表单步骤1中的字段“signature”的值,并仅在步骤1中的字段满足某些条件时将该字段设置为required。有办法做到吗?

xkrw2x1b

xkrw2x1b1#

你可以这样尝试:

export const page2Schema = yup.object().shape({
   dependentField: yup.string()
               .test("Dependent field is required when signature is provided", 
                     function (value) {
                        //const signature = this.resolve(yup.ref("signature"));
                          const signature = this.parent.signature;
                             if (signature) {
                                return !!value;
                             } else {
                                return true;
                             }
                     }),
              }).

在this.resolve()函数中,可以获取signature的值。
如果signature为true,则可以检查dependentField是否有值(!!value)。
如果signature为false,则不提供此字段,并且可以允许dependentField的任何值。

相关问题