我如何根据带有 redux-form 的参数进行同步字段验证?

How can I do sync field validation based on a param with redux-form?

我需要在 redux 表单字段上进行同步字段验证。它的一个参数(最小值)在 redux 存储中。

如何将参数传递给字段验证器函数?甚至是表单的同步验证器功能。

据我所知,我有两个选项来设置字段验证:

  1. 将验证函数传递给 reduxForm()

如果我选择这条路线,我如何从验证函数访问表单道具? 即使我将验证函数绑定到表单,它也看不到表单的道具。

App = reduxForm({
  form: "MyForm",
  validate: validate.bind(App)
})(App);

我无法将 MyForm.Validate 函数传递给 reduxForm。

  1. 在 Field 组件上使用 validate 属性设置一个验证函数

这条路线我会将 prop 作为参数传递给验证函数。 IE。 <Field validate={minValue(this.props.minValue)} /> But in this comment 据说这不是一个好方法,因为它会在每个表单渲染上创建一个新函数。实际上它不能正常工作 - 在其他字段的验证错误发生之前不进行验证。

My attempts on codepen

我找到了解决方法。

const Validations = {
  minAmount: minValue => value => {
    return parseFloat(value) < minValue
      ? "Amount must be at least " + minValue
      : undefined;
  }
};

在组件构造函数中:

constructor(props) {
    super(props);
    this.minAmount = Validations.minAmount(
        this.props.minAmount
    ); // this a a workaround for validations with parameters causing issues , see https://github.com/erikras/redux-form/issues/2453#issuecomment-272483784
}

然后在字段中:

<Field 
  validate={this.minAmount}
  ....