Reactjs 不确定函数的作用:语法
我不确定上述代码的语法。谁能帮我把它分解一下吗 我是新的箭头功能,但我在这里看到多个!!!在redux最终表单验证程序字段上调用该函数。如何更改它,使其返回未定义的“无验证失败”和“!验证失败的验证消息“” 我想知道是否有可能生成一个newComposeValidators函数,将相同的参数传递给composeValidators函数,并返回带有感叹号和空格的错误消息 它的用途如下:Reactjs 不确定函数的作用:语法,reactjs,react-native,ecmascript-6,arrow-functions,react-final-form,Reactjs,React Native,Ecmascript 6,Arrow Functions,React Final Form,我不确定上述代码的语法。谁能帮我把它分解一下吗 我是新的箭头功能,但我在这里看到多个!!!在redux最终表单验证程序字段上调用该函数。如何更改它,使其返回未定义的“无验证失败”和“!验证失败的验证消息“” 我想知道是否有可能生成一个newComposeValidators函数,将相同的参数传递给composeValidators函数,并返回带有感叹号和空格的错误消息 它的用途如下: export const composeValidators = (...validators) => v
export const composeValidators = (...validators) => value => validators.reduce((error, validator) => error || validator(value), undefined);
此函数将验证程序函数数组作为参数,并返回另一个函数
返回的函数将您的值作为参数,然后映射到验证器函数,
如果验证器(值)返回值,则将错误分配给该值,依此类推(undefined是for error的初始值),然后返回错误
看看函数
您的函数可能如下所示
export const composeValidators = (...validators) => value => validators.reduce((error, validator) => error || validator(value), undefined)
附加!如果验证失败,则返回一个错误空间
export const composeValidators = (...validators) => {
return function checkError(value){
// validators = [ requiredValidator, postalCodeValidator ] in this case
// imaginevalidators.reduce((error, validator) => error || validator(value), undefined) does something like this
let error = undefined
validators.map(validator => { // loop through array of validator function
if(validator(value)) {
error = validator(value)
}
})
return error
}
}
我认为最好的解释方法是通过一个例子。因此,考虑到这个函数:
validators.reduce((error, validator) => error || `! ${validator(value)}`, undefined)
我们可以这样称呼它:
export const composeValidators = (...validators) => value => validators.reduce((error, validator) => error || validator(value), undefined)
因此,(…验证器)
变为[valiadationRuleFunction1,valiadationRuleFunction2]
,'someValueHere'
变为值
就
composeValidators(valiadationRuleFunction1, valiadationRuleFunction2)( 'someValueHere')
我们首先将“error”定义为未定义的值。第一次运行时,错误将未定义,因此它将使用提供的值调用valiationrulefunction1
,即valiationrulefunction1('someValueHere')
如果通过验证,“error”仍然未定义,因此将使用提供的相同值调用valiationrulefunction2
,即valiationrulefunction2('someValueHere')
如果当前函数遇到错误,即如果valiationrulefunction1('someValueHere')
将返回验证错误,那么现在将定义“error”。
当我们执行此检查时,error | | validator(value)
-将返回错误,并且不会执行valiationrulefunction2('someValueHere)
这适用于基于优先级显示的单个错误消息,即最重要的验证规则应首先传递到“composeValidators”中。
如果存在需要显示多条错误消息的场景,我们会将reduce函数中的默认“error”值从“undefined”更改为“[]”。每次验证程序运行并返回错误时,我们都会将此错误推送到数组并返回一个错误数组
测试此返回函数的函数
假设我们有一个验证器(当未指定值时,这将返回一个错误,即需要验证):
使用*语法导入此规则,即,Import*作为验证规则从“/path”导入此规则所在的位置“
为此验证规则创建一个间谍,例如,const valiadationRuleFunction1Spy=jest.spyOn(验证,'valiadationRuleFunction1')代码>
使用验证器和一个值调用“composeValidators”函数,该值将触发错误并断言返回的错误消息,即expect(composeValidators(valiadationRuleFunction1)('')。toBe('请提供值')
李>
然后,我们可以使用valiadationRuleFunction1Spy
断言调用了实际的验证函数,即expect(valiadationRuleFunction1Spy)代码>
我很困惑。我们从何处获取或传递此错误?它实际上是获取一个灵活的参数列表,这些参数是验证程序函数,转换为数组。你的答案是misleading@iMoses是的,试着让他知道验证器是一个数组。在这种情况下,我是一个新的js程序员,语法有时会让我头晕目眩。两个问题:我理解验证器是一个数组,因为我可以传递多个参数,但“值”是什么?哪一个?哪里什么?错误??那到底是什么?谁能给我详细解释一下吗?抱歉这么直截了当。我也理解reduce函数。但什么是“错误”?我从未通过考试?它是从哪里来的?
export const composeValidators = (...validators) => value => validators.reduce((error, validator) => error || validator(value), undefined)
composeValidators(valiadationRuleFunction1, valiadationRuleFunction2)( 'someValueHere')
validators.reduce((error, validator) => error || validator(value), undefined)
export const valiadationRuleFunction1 = value => !value ? 'Please provide a value' : undefined`