Reactjs使用Yup校验两个输入值相等,解决oneOf报enums.forEach is not a function问题
报错原因
你遇到的enums.forEach is not a function报错是因为oneOf方法的入参格式不符合要求:Yup的oneOf第一个参数必须传入枚举值数组,你直接传入了字符串'password',非数组类型没有forEach方法,所以触发报错。
修复方案
要实现确认密码和密码字段的等值校验,需要用Yup.ref()引用目标字段的值,再将其传入oneOf的数组参数中,修改后的校验规则如下:
validationSchema={ Yup.object({ password: Yup.string() .min(8, "senha é muito curta") .max(30, "senha é muito longa") .required("O campo senha não pode ser vazio"), confirmpassword: Yup.string() .min(8, "senha é muito curta") .max(30, "senha é muito longa") // 此处修改:用Yup.ref引用password字段,包裹在数组中作为oneOf的第一个参数 .oneOf([Yup.ref('password')], 'senhas devem combinar') .required("O campo senha não pode ser vazio"), }) }
补充说明:
Yup.ref('password')会动态获取当前表单中同层级password字段的输入值,符合oneOf的入参规则后就能正常校验两个字段的值是否一致。
内容的提问来源于stack exchange,提问作者Guilherme Cavenaghi
相关产品推荐
相关产品推荐

