Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 不确定函数的作用:语法_Reactjs_React Native_Ecmascript 6_Arrow Functions_React Final Form - Fatal编程技术网

Reactjs 不确定函数的作用:语法

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

我不确定上述代码的语法。谁能帮我把它分解一下吗

我是新的箭头功能,但我在这里看到多个!!!在redux最终表单验证程序字段上调用该函数。如何更改它,使其返回未定义的“无验证失败”和“!验证失败的验证消息“”

我想知道是否有可能生成一个newComposeValidators函数,将相同的参数传递给composeValidators函数,并返回带有感叹号和空格的错误消息

它的用途如下:

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`