是的,基于另一个字段的值的验证

Alb*_*rra 7 javascript reactjs yup

我有三个字段:Formik 形式的referenceMonth(string)、openingDate(string)、endingDate(string)。我会在“ openingDatewhen openingDatis not the samemonth as”中添加一个错误referenceMonth

export const VALIDATION_SCHEMA = Yup.object().shape({
    'referenceMonth' : Yup.number().required(YUP_DEFAULT_ERROR_VALUE),
    'openingDate' : Yup.string().when(['referenceMonth', 'openingDate'], {
        is: (referenceMonth: string, openingDate: string) => 
             referenceMonth !== `${new Date(openingDate).getMonth()}`,
        then: Yup.string().required('Select right month')
    }),
})
Run Code Online (Sandbox Code Playgroud)

终端显示:错误:循环依赖,节点为:“openingDate”。

Yed*_*hin 10

需要对相互依赖、需要验证的字段进行排序,以便按照所需的顺序构建它们。您可以通过按照特定顺序在末尾添加需要验证的字段来尝试这种方式吗:

export const VALIDATION_SCHEMA = Yup.object().shape({
    'referenceMonth' : Yup.number().required(YUP_DEFAULT_ERROR_VALUE),
    'openingDate' : Yup.string().when(['referenceMonth', 'openingDate'], {
        is: (referenceMonth, openingDate) => 
             referenceMonth !== `${new Date(openingDate).getMonth()}`,
        then: Yup.string().required('Select right month')
    }),
}, [['referenceMonth', 'openingDate']])

Run Code Online (Sandbox Code Playgroud)


Ris*_*ngh 5

由于您的验证openingDate非常简单,因为在架构中openingDate不会改变(根据我的理解),我建议您使用test而不是when. 你可以像这样替换whentest

.test("dateTest", "Select right month", function (value) {
   return this.parent.referenceMonth !== `${new Date(value).getMonth()}`;
 })
Run Code Online (Sandbox Code Playgroud)