Closed
Description
Version
2.13.2
Environment
最新
Reproduction link
https://codepen.io/OneAndOnly1111/pen/wrGjJg?editors=1010
Steps to reproduce
动态增减表单项,每一项是一个panel panel下有好几个form ,发现问题: 如何增加后panel不打开就删除,提交的时候回校验删除掉的panel下的form
What is expected?
动态增减表单可支持多个表单的嵌套
What is actually happening?
不符合预期
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity
ant-design-bot commentedon Sep 20, 2017
It will be better to write your issue/comment in English, so more people can understand you.
And this means that more people can help you or benefit from your issue/comment.
See: #4897
OneAndOnly1111 commentedon Sep 20, 2017
benjycui commentedon Sep 21, 2017
Please provide a re-producible demo: http://codepen.io/benjycui/pen/KgPZrE?editors=001
Not just part of your code, thanks.
OneAndOnly1111 commentedon Sep 21, 2017
https://codepen.io/OneAndOnly1111/pen/KXMqPO
业务代码在这,但是弄了很久调不出来,恳请看下
benjycui commentedon Sep 21, 2017
无法重现的话,也帮不了你啊。。。
OneAndOnly1111 commentedon Sep 21, 2017
https://codepen.io/OneAndOnly1111/pen/BwzmEa?editors=0011
可重现的代码 @benjycui
点击添加后 不展开panel 直接 点击panel上的删除图标,console报错,被删除掉的input没有填写 。。
OneAndOnly1111 commentedon Sep 21, 2017
如果添加完先展开一下panel再删除,提交的时候不会再去校验删除掉的,不展开直接删除的话,会去校验已经删除掉的,并且提交按钮点击再也无效。
afc163 commentedon Sep 21, 2017
按此步骤无法重现报错。
建议按这个格式提供详细的重现步骤,必要的话请补充 Gif 图。
OneAndOnly1111 commentedon Sep 21, 2017
@afc163 @benjycui 补录的gif图
OneAndOnly1111 commentedon Sep 21, 2017
点击添加后 不展开panel 直接 点击panel上的删除图标,然后点击提交按钮,console报错 (之前的是我没说清楚,不好意思)
benjycui commentedon Sep 22, 2017
Chrome 下的确没有重现。
这个我观察到的情况刚好相反,打开后再删除,提交时才会去校验。。
benjycui commentedon Sep 22, 2017
所以还是给出更加详细的步骤,不排除对于某些步骤我们理解不一致,所以操作其实是不一样的。
OneAndOnly1111 commentedon Sep 22, 2017
最简单的重现方式,
"async-validator:" ["names-1 is required"]
"async-validator:" ["names-2 is required"]
不理解的是:对于存在的panel ,其下的的input在没有填写的情况下进行校验是ok的;
但是,对于刚刚已经删除掉的panel ,仍然对其下的input进行了校验
OneAndOnly1111 commentedon Sep 22, 2017
@benjycui 对上述操作录的动图
ChiaJune commentedon Sep 24, 2017
我也有这个问题,
OneAndOnly1111 commentedon Sep 24, 2017
@ChiaJune 也是使用panel下包含form才有这个问题嘛? 有解决思路的话麻烦分享一下
ChiaJune commentedon Sep 24, 2017
@OneAndOnly1111 我不知道是不是一样的。我这里的业务需求是这样的,我要删除/添加多个受控组件而不是单个受控组件,所以我把这些受控组件封装到一个Form类里面,然后来循环输出这个Form类(这里借鉴#4901处理方式)。
如图:
我找出了自己的问题。就是循环时候
key
的问题。重要的话说三次:key
一定要唯一!key
一定要唯一!key
一定要唯一!哎,之前对于key理解不深刻,这次采坑后肯定不会忘了...benjycui commentedon Nov 16, 2017
这个问题的原因是:
OneAndOnly1111 commentedon Nov 16, 2017
目前已经用了一种比较蠢的方法解决了: 新增的Panel默认就给打开。
请问还有其它比较好的解决方案吗?
benjycui commentedon Nov 16, 2017
这个问题如果要遭 Form 里面解决的话,需要把注册这个行为延后到 mount 时,但这样会 break 已有的用法,即直接调用
getFieldDecorator('keys', { initialValue: [] });
而没有关联具体的组件 https://ant.design/components/form/#components-form-demo-dynamic-form-item所以还是在业务代码里面处理吧。
wuzhidexiaoheizi commentedon Dec 23, 2017
一个页面循环输出这么多form元素好吗?