根据你提供的代码,最后的验证通过需要满足两个条件:必填字段不为空,并且没有其他错误信息。
首先,在handleSubmit函数中,你已经使用validator对表单值进行了验证,并将错误信息保存在error变量中。接下来,你可以添加一个额外的判断逻辑,检查是否存在必填字段的错误信息(requieredError),如果存在,则将它赋值给error._error属性。
修改handleSubmit函数如下:
const handleSubmit = (values) => {
console.log('1111111');
const error = validator(values);
const requieredError = checkRequired()(null, values); // 注意这里要传入values而不是value
if (requieredError) {
error._error = requieredError;
}
if (!error._error) {
console.log('验证通过');
// 执行提交操作或其他操作
}
}
在InputGroup组件中,你使用{…minAmount}和{…maxAmount}来将相关属性绑定到input元素上。根据代码推断,minAmount和maxAmount应该是Formik库中Field组件所定义的field对象。
为了确保数值类型一致性,你可以在minAmount和maxAmount.onChange回调函数中使用Number()方法将输入转换为数字类型。修改相关代码如下:
<InputGroup field={minAmount} label="最小授信金额" sm={3} lsm={3} size="sm">
<div className="col-sm-9">
<input type="text" className="form-control" {...minAmount} onBlur={e => minAmount.onChange(Number(e.target.value))} />
</div>
</InputGroup>
<InputGroup field={maxAmount} label="最大授信金额" sm={3} lsm={3} size="sm">
<div className="col-sm-9">
<input type="text" className="form-control" {...maxAmount} onBlur={e => maxAmount.onChange(Number(e.target.value))} />
</div>
</InputGroup>
这样做可以确保输入的值都是数值类型,而不是字符串类型。然后,在validator中的checkoutLegalPerson函数中,你可以使用字段名作为参数传递,并在返回错误信息时将字段名动态添加到错误消息中。
const checkoutLegalPerson = (field) => {
return (value) => {
if (!value) {
return `${field}不能为空`;
}
};
};
通过上述修改,你应该能够在满足必填条件并且没有其他错误信息时让验证通过。如果有任何其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问