reactjs - FieldArray 中的 redux-form 自定义动态验证
问题描述
我正在尝试解决两个字段的验证。这是两个多选,我需要在两个字段中具有相同数量的选定项目。
我试图遵循这个例子:https : //redux-form.com/6.6.2/examples/fieldlevelvalidation/ 但问题是我正在使用 FieldArray 动态添加新行。
我试图制作这样的功能
const validateCount = (member) => (values, allValues) => {
// validation funciton
}
member
是 FieldArray 中行的标识符。
但是当我在渲染循环中调用这个函数时,会出现一个无限循环。
<FieldArray component={this.renderMapping} name="mapping" />
...
renderMapping = ({fields}) => {
...
{fields.map((member, index) => {
<Field
component={MultiSelectField}
name={`${member}.select1`}
validate={required}
...
/>
<Field
component={MultiSelectField}
name={`${member}.select2`}
validate={[required, validateCount(member)]} // <<<<<<<< THIS IS PROBLEM
...
/>
}
...
}
请,任何想法如何解决它?
它在console.log中,它可能正在调用无限渲染
redux-logger.js:1 action @@redux-form/REGISTER_FIELD @ 13:25:44.900
redux-logger.js:1 action @@redux-form/UPDATE_SYNC_ERRORS @ 13:25:44.934
redux-logger.js:1 action @@redux-form/UNREGISTER_FIELD @ 13:25:44.962
redux-logger.js:1 action @@redux-form/REGISTER_FIELD @ 13:25:44.977
redux-logger.js:1 action @@redux-form/UPDATE_SYNC_ERRORS @ 13:25:45.018
redux-logger.js:1 action @@redux-form/UNREGISTER_FIELD @ 13:25:45.044
redux-logger.js:1 action @@redux-form/REGISTER_FIELD @ 13:25:45.061
redux-logger.js:1 action @@redux-form/UPDATE_SYNC_ERRORS @ 13:25:45.099
redux-logger.js:1 action @@redux-form/UNREGISTER_FIELD @ 13:25:45.147
redux-logger.js:1 action @@redux-form/REGISTER_FIELD @ 13:25:45.163
redux-logger.js:1 action @@redux-form/UPDATE_SYNC_ERRORS @ 13:25:45.192
redux-logger.js:1 action @@redux-form/UNREGISTER_FIELD @ 13:25:45.225
redux-logger.js:1 action @@redux-form/REGISTER_FIELD @ 13:25:45.234
redux-logger.js:1 action @@redux-form/UPDATE_SYNC_ERRORS @ 13:25:45.265
redux-logger.js:1 action @@redux-form/UNREGISTER_FIELD @ 13:25:45.301
redux-logger.js:1 action @@redux-form/REGISTER_FIELD @ 13:25:45.313
redux-logger.js:1 action @@redux-form/UPDATE_SYNC_ERRORS @ 13:25:45.356
redux-logger.js:1 action @@redux-form/UNREGISTER_FIELD @ 13:25:45.395
redux-logger.js:1 action @@redux-form/REGISTER_FIELD @ 13:25:45.407
redux-logger.js:1 action @@redux-form/UPDATE_SYNC_ERRORS @ 13:25:45.445
redux-logger.js:1 action @@redux-form/UNREGISTER_FIELD @ 13:25:45.483
解决方案
我有解决方案,这不是最好的,但只有一个有效。
在componentDidMount
和componentWillUpdate
我正在调用我创建的验证函数的生成器。
generateValidationFunctions = props => {
const { values } = props;
const size = get(values, 'mapping.length', 0);
if (this.validationFunctions.length < size) {
for (let i = this.validationFunctions.length; i < size; i++) {
this.validationFunctions.push(this.validateCount(`mapping[${i}]`));
}
}
}
推荐阅读
- sqlite - 如何从 Sqlite 逐块流式传输数据?
- java - PDFbox 2.0.20 - 新的 PagePane() 抛出 RuntineException
- html - Django - 视频文件未加载到视图中
- stenciljs - 构建输出文件
- docker - 传递环境变量时出现“无效的卷规范”
- python - TypeError:“元组”对象不可调用问题
- postgresql - 如何在 Postgresql 中的几何列上创建 Gin 索引?
- c# - 防止 Exchange 2013 将邮件正文文本/纯文本转换为 HTML
- c# - 试图找出模型和 DbContext 的 EntityFramework 元数据:'Employee'
- javascript - 从 json 数组创建数据结构