React+Ant:编辑的时候,动态增删表单项不可删除

问题描述:标题描述的问题不准确,实际遇到的问题是表单中有一个动态增删的表单项,编辑的时候,如果有三条,会回显出三条数据,这时还可以增加新的循环表单项,但是删除的时候删除的只剩三条数据时,再点删除就失效了。

解决问题:一开始怀疑是name或者key的问题,把重心放在研究这上面了,解决一通无果,便想要用最原始的删除循环表单的方法,传递index,使用splice删除数组项,再赋值给form。

请教前辈后,找到出现问题的原因。

我在编辑的时候,把查到的详情数据赋给了Form的initialValues={{ ...detailInfo }},在Ant Design 的 Fom 组件中,如果在表单初始化设置了 initialValues,那在删除表单项时,其实是无法删除与 initialValues中相同值的表单项的,因为这些初始数据被保存在表单的 values 中,当删除表单项时,如果新添加的值仍然与初始值相同,那么删除操作会被视为无效操作。

所以最简单的解决办法就是Form表单不设置initialValues,将得到的详情数据可以在声明钩子中赋值

  useEffect(() => {
    form?.setFieldsValue(detailInfo)
  }, []);

这里也提供另一种解决思路:

在调用remove的时候,通过给remove方法传递表单项的索引,通过调用getFieldValue方法获取当前表单项的值,然后使用splice方法删除指定索引的表单项,并通过setFieldValue方法更新表单的values,这样应该可以正确删除表单项,即使它们的值与initiaValues相同。

const handleDeleteItem = (index) => {
    const detailsInfo = form.getFieldValue('detailsInfo ');
    detailsInfo.splice(index,1);
    form.setFieldsValue({ detailsInfo });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值