问题描述:标题描述的问题不准确,实际遇到的问题是表单中有一个动态增删的表单项,编辑的时候,如果有三条,会回显出三条数据,这时还可以增加新的循环表单项,但是删除的时候删除的只剩三条数据时,再点删除就失效了。
解决问题:一开始怀疑是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 });
}