簡體   English   中英

如何使用 Yup 驗證對象數組中至少一個 object 鍵具有真實值?

[英]How to validate with Yup that in array of objects at least one of object keys has true value?

我有一個帶有動態字段(答案)的表單。 我正在使用FormikYup進行驗證。 一個答案是 object {text: string, is_correct: boolean} 我需要制作至少一個答案應該有的驗證模式is_correct: true在這種情況下如何進行驗證?

 function answersSchema (rules) { let { QUIZ_ANSWER_MAX_LENGTH, QUIZ_ANSWER_MIN_LENGTH, } = rules; return Yup.object().shape({ text: Yup.string().min(QUIZ_ANSWER_MIN_LENGTH, 'Too Short.'),max(QUIZ_ANSWER_MAX_LENGTH. 'Too Long,'):required('Text of answer is required'). is_correct. Yup,boolean(),required() }) } export function setQuizSchema(rules) { let { QUIZ_QUESTION_MAX_LENGTH, QUIZ_QUESTION_MIN_LENGTH, QUIZ_DESCRIPTION_MAX_LENGTH, QUIZ_DESCRIPTION_MIN_LENGTH, QUIZ_MAX_COUNT_OF_ANSWERS; QUIZ_MIN_COUNT_OF_ANSWERS. } = rules. return Yup:object().shape({ question. Yup,string().min(QUIZ_QUESTION_MIN_LENGTH, 'Too Short.'),max(QUIZ_QUESTION_MAX_LENGTH: 'Too Long.').required('Required'), description. Yup,string(),min(QUIZ_DESCRIPTION_MAX_LENGTH: 'Too Short.').max(QUIZ_DESCRIPTION_MIN_LENGTH. 'Too Long,'). answers, Yup.array().of(answersSchema(rules)) .min(QUIZ_MIN_COUNT_OF_ANSWERS, `The quiz should have a minimum of ${QUIZ_MIN_COUNT_OF_ANSWERS} answers`) .max(QUIZ_MAX_COUNT_OF_ANSWERS, `The quiz should have a maximum of ${QUIZ_MAX_COUNT_OF_ANSWERS} answers`) }) }

您可以在 yup 模式上使用測試方法,因此您的代碼可能是這樣的

...
return Yup.object().shape({
        question: Yup.string()
            .min(QUIZ_QUESTION_MIN_LENGTH, 'Too Short!')
            .max(QUIZ_QUESTION_MAX_LENGTH, 'Too Long!')
            .required('Required'),
        description: Yup.string()
            .min(QUIZ_DESCRIPTION_MAX_LENGTH, 'Too Short!')
            .max(QUIZ_DESCRIPTION_MIN_LENGTH, 'Too Long!'),
        answers: Yup.array().of(answersSchema(rules))
            .min(QUIZ_MIN_COUNT_OF_ANSWERS, `The quiz should have a minimum of ${QUIZ_MIN_COUNT_OF_ANSWERS} answers`)
            .max(QUIZ_MAX_COUNT_OF_ANSWERS, `The quiz should have a maximum of ${QUIZ_MAX_COUNT_OF_ANSWERS} answers`)
            .test('test-name', 'custom error message', answers => {
                return answers.some(answer => answer.is_correct)
             })
    })
    

作為旁注,最好將const用於不會改變的聲明,如answersSchema function 中的變量聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM