fix(form): fixed dynamic rendering of form default data
🤔 这个 PR 的性质是?
- [x] 日常 bug 修复
- [ ] 新特性提交
- [x] 文档改进
- [x] 演示代码改进
- [ ] 组件样式/交互改进
- [ ] CI/CD 改进
- [x] 重构
- [ ] 代码风格优化
- [x] 测试用例
- [ ] 分支合并
- [ ] 其他
🔗 相关 Issue
#3076
💡 需求背景和解决方案
由于 Form 没有维护 formData 来管理表单的数据,而是直接使用 FormItem 中的 state 来记录,所以对于动态条件渲染的组件,如果使用 setFieldsValue 同时设置:1. 涉及判断条件的 fieldValue,2. 暂未渲染出来的 formItem 的值,结果跟用户的预期不一致。
所以在 Form 中创建了一个 游离值 formData,来记录这种临时的值。因为这类值预期是要被设置到对应组件上的,但是由于组件还没渲染,它们还没找到自己的归属,所以把它们叫做游离值(floatingFormData)哈哈
当使用 setFieldsValue 设置值时,会判断设置值对应的 FormItem 组件存不存在,如果不存在,就会把值记录到 FormItem 组件中。如果 组件不存在,但是游离值中已经有这个值了,会更新这个游离值。
当组件渲染时,会判断是否存在游离值,如果存在,则设置为组件的 initialData,优先级最高。当游离值被使用过后,会从游离 formData 中删除。
📝 更新日志
-
fix(Form): 修复了动态渲染表单无法使用 setFieldsValue 预设数据的问题
-
[ ] 本条 PR 不需要纳入 Changelog
☑️ 请求合并前的自查清单
⚠️ 请自检并全部勾选全部选项。⚠️
- [x] 文档已补充或无须补充
- [x] 代码演示已提供或无须提供
- [x] TypeScript 定义已补充或无须补充
- [x] Changelog 已提供或无须提供
@HaixingOoO @honkinglin 一起看看呢
@HaixingOoO @honkinglin 一起看看呢
好
@l123wx 需要解决下冲突再更新下快照
/update-snapshot
⏳ 正在运行快照更新。。。 CI: Open
@uyarn 是要合并一下主分支的代码吗
第一次给这个仓库提pr,不太清楚流程,不好意思😂
@l123wx 嗯 不过上面已经通过机器人已经更新好了
/update-common
