Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Form] 调用 form.reset 后,FormList 组件下的值会出现重复的情况 #3262

Open
l123wx opened this issue Dec 4, 2024 · 3 comments

Comments

@l123wx
Copy link
Contributor

l123wx commented Dec 4, 2024

tdesign-react 版本

1.10.0

重现链接

codesandbox.io/p/sandbox/magical-frost-q28kqm

重现步骤

关于form.reset 这个方法,在formlist 中存在 重复值的问题
image

先删除表单中一行,然后点击 setVal, 会出现 重复的数据
image

期望结果

调用 reset 方法后,formList 下面的 formItem 能正确重置为初始值

实际结果

调用 reset 方法后,formList 下面的 formItem 出现值重复的情况

框架版本

No response

浏览器版本

No response

系统版本

No response

Node版本

No response

补充说明

No response

Copy link
Contributor

github-actions bot commented Dec 4, 2024

👋 @l123wx,感谢给 TDesign 提出了 issue。
请根据 issue 模版确保背景信息的完善,我们将调查并尽快回复你。

@l123wx
Copy link
Contributor Author

l123wx commented Dec 4, 2024

具体是 FormList callback fields 导致的问题,当调用 remove 方法移除一项后,剩余 fields 中 key 与移除前的一致,但是 name 重新 计算了,导致 reset 的时候删除项后的所有项获取到了原先前一项的值

image

原:

  • 北京 key: 1 name: 0
  • 上海 key: 2 name: 1
  • 广州 key: 3 name: 2
  • 深圳 key: 4 name: 3

移除第一项:

  • 上海 key: 2 name: 0
  • 广州 key: 3 name: 1
  • 深圳 key: 4 name: 2

reset:

  1. formItemRef?.current?.resetField?.():
  • 上海 key: 2 name: 0 => 北京
  • 广州 key: 3 name: 1 => 上海
  • 深圳 key: 4 name: 2 => 广州
  1. formList > setFields
  • ----- key: 1 name: 0 => 北京
  • 北京 key: 2 name: 1 => 北京
  • 广州 key: 3 name: 2 => 上海
  • 深圳 key: 4 name: 3 => 广州

@l123wx
Copy link
Contributor Author

l123wx commented Dec 4, 2024

感觉得处理一下 FormList fields 的 key 这部分逻辑,包括 #3218 (comment) 提到的,每次调用 setFieldsValue,key 都会递增,导致 FormItem state 重置,组件重新渲染

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant