🐛[BUG] [ProForm] Form.useWatch returns object format ({0: {}}) instead of array ([{}]) after form reset #8973
Open
Description
🐛 bug 描述
在 ProForm 中使用 Form.useWatch 监听数组类型的字段时,当表单被重置(reset)后,数组类型的值会被错误地转换成对象格式。
例如:原本的 [{}]
会变成 {0: {}}
,这导致后续的数组操作出现异常。
📷 复现步骤
- 创建一个包含数组字段的 ProForm
- 使用 Form.useWatch 监听该数组字段
- 调用 form.resetFields()
- 观察 useWatch 返回的值变成了对象格式
🏞 期望结果
表单重置后,数组字段应该保持数组格式 [{}]
,而不是变成对象格式 {0: {}}
。
💻 复现代码
- 点击 [添加一行数据]
- 点击[重置]
- 打开 Console
© 版本信息
- ProComponents: 2.8.3
- Ant Design: 5.x
- React: 18.x
- 浏览器环境: Chrome 最新版
- 开发环境: macOS/Windows
🚑 其他信息
问题似乎出在 BaseForm.tsx 中的 transformKey 函数处理过程。在表单重置时,通过 onValuesChange 触发的值转换过程中,数组被错误地转换成了对象格式。
相关源码:
https://github.com/ant-design/pro-components/blob/master/packages/form/src/BaseForm/BaseForm.tsx#L809-L814
https://github.com/ant-design/pro-components/blob/master/packages/utils/src/transformKeySubmitValue/index.ts
Metadata
Assignees
Labels
No labels