yupのvalidationが複数のフィールドのエラーを返してくれない
以下のようにvalidateメソッドを呼ぶと、ValidationErrorをthrowする。そのエラーには最初のtitleのrequiredのエラーしか入っていない。descriptionのエラーも欲しい。
const schema = yup.object().shape({
title: yup.string().required(),
description: yup.string().required(),
});
try {
schema.validate({
title: "",
description: "",
})
} catch (e: any) {
if (e instanceof(ValidationError)) {
console.log(e.inner)
}
}
e.innerにはtitleのエラーしか入っていない。
e.inner[0].path
=> "title"
e.inner[0].message
=> "title is a required field"
解決
schema.validateを呼ぶ時、abortEarlyオプションをつける。
yupSchema.validateSync({
title: "",
description: "",
},
{ abortEarly: false }
)
} catch (e) {
if (e instanceof(ValidationError)) {
ValidationError#innerは以下のようになる。
e.inner[0].path
=> "title"
e.inner[0].message
=> "title is a required field"
e.inner[1].path
=> "description"
e.inner[1].message
=> "description is a required field"