因为表单的校验的逻辑是可以复用的,所以可以把校验的逻辑都抽取出来,然后用柯里化去调用,传入校验的策略名和校验的错误信息,返回validator给rules的自定义校验函数
export const strategies = {
[StrategyKey.ValidateUserName](str) {
const reg = /^[\u4e00-\u9fa5]+$/;
return reg.test(str);
},
};
export const StrategyKey = {
ValidateUserName: 'validateUsername',
};
/**
*
* @param {*} key 策略key
* @param {*} errMsg 校验的错误信息
* @returns void
*/
export const validate = (key, errMsg) => (rule, propValue, cb) => {
if (strategies[key](propValue)) {
cb();
} else {
cb(new Error(errMsg));
}
};
const rules = {
username: [
{
validator: validate(StrategyKey.ValidateUserName, 'username不能为空!'),
trigger: 'blur',
},
],
};