我有这个函数应该运行每个验证器,然后返回包含错误的对象。
一切似乎都工作正常,但数组中的第一个验证器。这好像是reduce
完全忽略它。无论我在那里放置什么验证器,它都会直接转到第二个验证器。
我在这里遗漏了一些明显的东西吗?
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
})
);
如果您不提供要减少的初始值,那么它将使用数组的第一个元素作为初始值,并跳过使用该元素调用您的减速器。所以第一次调用你的减速器时,currentErrors
is validateFullName
, and validator
is validateServicePresence
.
要解决此问题,只需添加一个初始值:
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
}, {}) // <===================
);
请参阅此处的初始值部分:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Parameters https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Parameters
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)