使用函数作为redux形式的输入验证prop

时间:2017-09-23 10:37:44

标签: redux redux-form

我对验证道具有疑问。 假设我们(.....) 在组件中我们定义了这个:

<Field>
 validate = {validate}
</Field>

为什么我们不能写validate = {validate(value)}或为什么写这样的东西不正确:validate={()=> validate(value)} 谢谢!

1 个答案:

答案 0 :(得分:2)

validate上的Field道具需要一个函数(或一组函数),用于验证传入的字段值。所以你不能写validate={ someCustomValidator(value) },除非someCustomValidator函数是你定义的函数,而函数又返回一个函数。

使用validate={()=> someCustomValidator(value)}应该有效,但在您的示例的上下文中没有多大意义(value来自哪里?)。如果您使用validate={(value)=> someCustomValidator(value)}代替,则更有意义,但这是有问题的,因为每次具有Field的组件重新渲染时,这将创建一个新函数。根据{{​​3}}:

  

注意:如果验证道具发生更改,则该字段将重新注册。

这可能不是你想要发生的事情。

所以,使用

// validation
const someCustomValidator = value => {
  // give error roughly half of the time
  return Math.random() < 0.5 ?
     undefined : // validation is ok
     'Validation failed'; // this will be available in meta.error
}

// somewhere else
<Field validate={someCustomValidator} />

是使用它的正确方法。但请注意Field内部不知道如何显示潜在的验证错误。你必须自己解决。有关示例,请参阅documentation