我如何根据带有 redux-form 的参数进行同步字段验证?
How can I do sync field validation based on a param with redux-form?
我需要在 redux 表单字段上进行同步字段验证。它的一个参数(最小值)在 redux 存储中。
如何将参数传递给字段验证器函数?甚至是表单的同步验证器功能。
据我所知,我有两个选项来设置字段验证:
- 将验证函数传递给 reduxForm()
如果我选择这条路线,我如何从验证函数访问表单道具?
即使我将验证函数绑定到表单,它也看不到表单的道具。
App = reduxForm({
form: "MyForm",
validate: validate.bind(App)
})(App);
我无法将 MyForm.Validate 函数传递给 reduxForm。
- 在 Field 组件上使用 validate 属性设置一个验证函数
这条路线我会将 prop 作为参数传递给验证函数。
IE。 <Field validate={minValue(this.props.minValue)} />
But in this comment 据说这不是一个好方法,因为它会在每个表单渲染上创建一个新函数。实际上它不能正常工作 - 在其他字段的验证错误发生之前不进行验证。
我找到了解决方法。
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}
....
我需要在 redux 表单字段上进行同步字段验证。它的一个参数(最小值)在 redux 存储中。
如何将参数传递给字段验证器函数?甚至是表单的同步验证器功能。
据我所知,我有两个选项来设置字段验证:
- 将验证函数传递给 reduxForm()
如果我选择这条路线,我如何从验证函数访问表单道具? 即使我将验证函数绑定到表单,它也看不到表单的道具。
App = reduxForm({
form: "MyForm",
validate: validate.bind(App)
})(App);
我无法将 MyForm.Validate 函数传递给 reduxForm。
- 在 Field 组件上使用 validate 属性设置一个验证函数
这条路线我会将 prop 作为参数传递给验证函数。
IE。 <Field validate={minValue(this.props.minValue)} />
But in this comment 据说这不是一个好方法,因为它会在每个表单渲染上创建一个新函数。实际上它不能正常工作 - 在其他字段的验证错误发生之前不进行验证。
我找到了解决方法。
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}
....