【发布时间】:2019-07-15 17:23:58
【问题描述】:
export const composeValidators = (...validators) => value => validators.reduce((error, validator) => error || validator(value), undefined);
export const composeAccreditionValidators = (... validators) => value => validators.reduce((error, validator) => validator(value) === undefined ? error : `! ${validator(value)}`, undefined);
我正在尝试专门为我的一个组件创建第二个函数,并且希望让第二个函数调用第一个函数。从语法上讲,我可能会犯一些错误,因此代码对我来说很糟糕。有人可以帮忙吗?
注意:我想保持第二个的逻辑完整。本质上,它将输出字符串包装在 !和第一个不同的空间。
编辑:这里写的是相同的函数,所以它们更容易阅读。
function composeValidators(...validators) {
return function (value) {
return validators.reduce((error, validator) => (
error || validator(value)
), undefined)
}
}
function composeAccreditionValidators(...validators) {
return function (value) {
return validators.reduce((error, validator) => (
validator(value) === undefined
? error
: `! ${validator(value)}`
), undefined);
}
}
【问题讨论】:
-
我对您的示例进行了一些修改,以尝试了解您要做什么。编辑后,我发现很难得到它。您能否详细说明您想要实现的目标?
-
感谢您的编辑。我试图从第二个函数调用第一个函数,如果返回错误字符串,则将第二个函数的结果包装在空格和感叹号中。否则返回未定义。
-
@guzmonne 我相信目标是通过重用
composeValidators()使composeAccreditionValidators更加干燥。我想这将需要修改composeValidators()的定义才能做到这一点。 -
是的,这是正确的@Patrick Roberts
-
我不确定你是否知道,但输出格式并不是这两个验证器作曲家之间唯一不同的地方。主要区别在于默认作曲家调用每个验证器 0-1 次,而“认证”作曲家调用每个验证器 1-2 次。呼叫量是您希望保留的行为的一部分吗?此外,验证器是否会返回
undefined以外的虚假值?如果这两个问题的答案都是“否”,那么muZk's answer 应该可以工作,否则就不行。
标签: javascript reactjs ecmascript-6 react-redux react-final-form