【问题标题】:Validate prop with function as input in redux form使用函数作为 redux 形式的输入来验证 prop
【发布时间】:2017-09-23 10:37:44
【问题描述】:

我对 validate 道具有疑问。 假设我们(.....) 在组件中我们这样定义:

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

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

【问题讨论】:

标签: redux redux-form


【解决方案1】:

Field 上的 validate 属性接受一个函数(或函数数组),用于验证传入的字段值。所以你不能写validate={ someCustomValidator(value) },除非someCustomValidator函数是你定义的函数,然后返回一个函数。

使用 validate={()=&gt; someCustomValidator(value)} 应该可以,但在您的示例上下文中没有多大意义(value 来自哪里?)。如果您改用validate={(value)=&gt; someCustomValidator(value)},那会更有意义,但这是有问题的,因为每次带有Field 的组件重新渲染时都会创建一个新函数。并根据documentation

注意:如果 validate 属性发生变化,该字段将被重新注册。

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

所以,使用

// 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 在内部并不知道如何显示潜在的验证错误。你必须自己解决。示例见https://redux-form.com/7.0.4/examples/fieldlevelvalidation/

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    相关资源
    最近更新 更多