tdesign-react icon indicating copy to clipboard operation
tdesign-react copied to clipboard

fix(form): fixed dynamic rendering of form default data

Open l123wx opened this issue 1 year ago • 9 comments

🤔 这个 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 已提供或无须提供

l123wx avatar Oct 17 '24 03:10 l123wx

完成

github-actions[bot] avatar Oct 17 '24 03:10 github-actions[bot]

@HaixingOoO @honkinglin 一起看看呢

uyarn avatar Oct 17 '24 07:10 uyarn

@HaixingOoO @honkinglin 一起看看呢

HaixingOoO avatar Oct 17 '24 07:10 HaixingOoO

@l123wx 需要解决下冲突再更新下快照

uyarn avatar Oct 18 '24 07:10 uyarn

/update-snapshot

liweijie0812 avatar Oct 18 '24 07:10 liweijie0812

⏳ 正在运行快照更新。。。 CI: Open

github-actions[bot] avatar Oct 18 '24 07:10 github-actions[bot]

@uyarn 是要合并一下主分支的代码吗

第一次给这个仓库提pr,不太清楚流程,不好意思😂

l123wx avatar Oct 18 '24 07:10 l123wx

@l123wx 嗯 不过上面已经通过机器人已经更新好了

uyarn avatar Oct 19 '24 14:10 uyarn

/update-common

uyarn avatar Oct 19 '24 14:10 uyarn