You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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函数加了日志,确认这个过程中它并没有触发,所以问题不在这个函数。

Redux调试工具显示期望的状态
Redux调试工具显示后续错误状态

求助

如何阻止这种额外的CHANGE动作,实现仅删除目标数组元素、保留其他所有数据的效果?


内容的提问来源于stack exchange,提问作者PaulSusset

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:10:28