Redux-form在复杂fieldArray中删除元素时触发额外CHANGE动作问题
Redux-Form嵌套FieldArray删除元素时数据丢失问题
我用reduxForm构建了一个包含嵌套fieldArray组件的表单,组件内有两个联动下拉菜单:第一个下拉的选项决定第二个下拉的可选内容。
现有实现代码
// 初始化表单时设置列表值 const setInitialQualifiantTypeList = () => { const list: (string | undefined)[] = [] fields.forEach((qualifiant: any, index: number) => { const qualifiantType = fields.get(index).qualifiantType list.push(qualifiantType ? `B0${qualifiantType}` : undefined) }) return list } let qualifiantTypeList = setInitialQualifiantTypeList() // 切换类型时更新列表参数 const onChangeQualifiantType = ( qualifiantType: string, qualifiant: string, name: string, index: number ) => { let newQualifiantTypeList = [...qualifiantTypeList] if (qualifiantType === '') { newQualifiantTypeList[index] = undefined } else { newQualifiantTypeList[index] = `B0${qualifiantType}` // setQualifiantTypeList(newQualifiantTypeList) qualifiantTypeList = newQualifiantTypeList } // 如果类型不匹配,重置对应值 if (qualifiantType !== qualifiant.substring(0, 2)) { resetValue(`${name}[${index}].qualifiant`) } }
qualifiantTypeList会作为props传递给下拉菜单组件,用来获取对应的选项列表。
问题现象
处理fieldArray时,删除除最后一个之外的任意字段都会导致部分数据丢失。我试过用fields.remove(index)甚至change(form, field, newArray)替换整个数组值,但redux-form总会触发一个额外的CHANGE动作,导致数据从:
[ { "qualifiantType": "94", "qualifiant": "1KBC-CA-Q" }, { "qualifiantType": "95", "qualifiant": "2A" }, { "qualifiantType": "96", "qualifiant": "3B" } ]
变为:
[ { "qualifiantType": "94", "qualifiant": "1KBC-CA-Q" }, { "qualifiantType": "96" } ]


Redux调试工具中会先出现期望的正确状态,但随后会分发一个额外的CHANGE动作把数据清除。我已经给onChangeQualifiantType函数加了日志,确认这个过程中它并没有触发,所以问题不在这个函数。


求助
如何阻止这种额外的CHANGE动作,实现仅删除目标数组元素、保留其他所有数据的效果?
内容的提问来源于stack exchange,提问作者PaulSusset
相关产品推荐
相关产品推荐

