如何在不重定义Schema的前提下仅验证Yup Schema的部分字段?
解决Yup Schema仅验证指定字段的问题
你可以通过以下两种方式实现仅验证category字段,无需重新定义完整Schema:
方法一:使用validateAt单独验证单个字段
直接调用Yup的validateAt方法,指定要验证的字段名和对应值,这样只会触发该字段的校验规则,不会检查其他字段:
const handle = async () => { try { // 仅验证category字段 await InsertSchema.validateAt('category', { category }); // 验证通过时清空错误 setInputErrors({}); } catch (e) { // 仅捕获category字段的错误 setInputErrors({ category: e.message }); } }
方法二:使用pick提取指定字段的Schema
通过pick方法从原Schema中提取需要验证的字段,生成一个仅包含该字段规则的新Schema,再进行验证:
const handle = async () => { try { // 从原Schema中提取category字段的验证规则 await InsertSchema.pick(['category']).validate({ category }, { abortEarly: false }); setInputErrors({}); } catch (e) { let errors = getYupValidationErrors(e); setInputErrors(errors); } }
原代码问题说明
你之前的验证方式会触发usage的错误,是因为原Schema中usage被标记为必填,当你传入的对象缺少该字段时,Yup会自动校验所有必填字段。上面两种方法都能规避这个问题,只聚焦在category字段的验证上。
内容的提问来源于stack exchange,提问作者Marcellin Khoury
相关产品推荐
相关产品推荐

