我对验证道具有疑问。 假设我们(.....) 在组件中我们定义了这个:
<Field>
validate = {validate}
</Field>
为什么我们不能写validate = {validate(value)}或为什么写这样的东西不正确:validate={()=> validate(value)}
谢谢!
答案 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。