要实现一个功能动态表单中嵌套动态表单如下:

仔细看看antd的文档其实不难 具体步骤如下

1.建立一个 名为 ConcatRegion的组件(动态表单A)代码如下

export function ConcatRegion({ form }: ConcatRegionProps) {
return (
<>
<Form.Item label="策略">
<Form.List name="totalStrategy">
{(fields, { add, remove }) => {
return (
<div className={styles.concat_regin_widget}>
{fields.map((field, index) => (
<Space key={field.key} style={{ display: 'flex', marginBottom: 8 }} align="start">
<ConcatRegionItem index={index} form={form} field={field} />
<DeleteTwoTone twoToneColor="#ff7875" onClick={() => remove(field.name)} />
</Space>
))} <Form.Item>
<Button
type="dashed"
className={styles.btn_blue_dashed}
onClick={() => add()}
block
>
<PlusOutlined className={styles.icon} /> 新增策略
</Button>
</Form.Item>
</div>
);
}}
</Form.List>
</Form.Item>
</>
);
}

 2.建议一个名为ConcatRegionItem的表单(动态表单B) 代码如下:

export function ConcatRegionItem({ index, form, field }: ConcatRegionItemProps) {
return (
<>
<Form.Item
label={`策略${index + 1}`}
name={[field.name, 'strategy']}
fieldKey={[field.fieldKey, 'strategy']}
>
<Form.List name={[field.name, 'strategy']}>
{(fields, { add, remove }) => {
return (
<div>
{fields.map((innerField, index) => {
return (
<Space
key={innerField.key}
style={{ display: 'flex', marginBottom: 8 }}
align="start"
>
<Form.Item
{...innerField}
name={[innerField.name, 'area']}
fieldKey={[innerField.fieldKey, 'area']}
rules={[{ required: true, message: '请选择区域' }]}
>
<SelectMainArea />
</Form.Item> <Form.Item
{...innerField}
name={[innerField.name, 'mainRegion']}
fieldKey={[innerField.fieldKey, 'mainRegion']}
rules={[{ required: true, message: '请选择国家' }]}
>
<Select style={{ width: '150px' }} placeholder="国家">
<Option value="1">一区</Option>
<Option value="2">二区</Option>
</Select>
</Form.Item>
{index === fields.length - 1 && <PlusCircleTwoTone onClick={() => add()} />}
{index >= 1 && (
<MinusCircleTwoTone onClick={() => remove(innerField.name)} />
)} </Space>
);
})} {!fields.length && (
<Form.Item>
<Button type="dashed" onClick={() => add()} block>
<PlusOutlined /> 新增数据配置
</Button>
</Form.Item>
)}
</div>
);
}}
</Form.List>
</Form.Item>
</>
);
}

 注意:这里要把第一个外层表单的feild带过来~,传递给子组件用于做子组件的 Form.Item的name

组件  <SelectMainArea />为联动select 带值回来到 ConcatRegionItem

【react】实现动态表单中嵌套动态表单的更多相关文章

  1. JS 08表单操作_表单域

    一.表单的获取方式 document.getElementById() document.forms[index]; document.forms[form_name] document.form_n ...

  2. 如何在启用SharePoint浏览器功能的InfoPath 表单中添加托管代码以动态地加载并显示图片

    InfoPath 的浏览器表单不支持加载并显示图片,当然在模板中可以插入图片,但是如果想显示数据库的一幅图片,或是动态加载一张图片就无能为力了. 基实这个问题可以通过在浏览器表单中使用: " ...

  3. jQuery的下面是动态表格动态表单中的HTML代码

    动态表格动态表单中的Jquery代码 <script type="text/javascript" src="/include/jquery/jquery-1.1. ...

  4. 【Paddy】如何将物理表分割成动态数据表与静态数据表

    前言 一般来说,物理表的增.删.改.查都受到数据量的制约,进而影响了性能. 很多情况下,你所负责的业务关键表中,每日变动的数据库与不变动的数据量比较,相差非常大. 这里我们将变动的数据称为动态数据,不 ...

  5. 022. ASP.NET为DataSet中数据集添加关系及动态创建主子表和添加主子表关系

    protected void Page_Load(object sender, EventArgs e) { string connectionString = "server=.;data ...

  6. 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后 ...

  7. vue + element 动态渲染、移除表单并添加验证

    博客地址:https://ainyi.com/66 又接到新需求了吧~~ 背景 在一个大表单里,有可能会出现这种需求,用户可以自己操作动态添加.移除表单,更加个性化的效果. 常见于填写个人信息.附加内 ...

  8. Liferay7 BPM门户开发之9: 流程表单数据动态映射体系

    设计目的: 每个流程表单涉及不同的表单变量.比如请假流程有3个任务节点,分别是 Task1:开始流程,填写请假人.请假原因.请假开始时间.请假结束时间: Task2:上级审批,填写是否同意,审批意见: ...

  9. sql的存储过程实例--动态根据表数据复制一个表的数据到另一个表

    动态根据表数据复制一个表的数据到另一个表 把track表的记录 根据mac_id后两位数字,复制到对应track_? 的表中 如:mac_id=12345678910,则后两位10 对应表为track ...

随机推荐

  1. 第七届蓝桥杯JavaC组省赛真题

    解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.有奖竞猜 题目描述 小明很喜欢猜谜语. 最近,他被邀请参加了X星球的猜谜活动. 每位选手开始的时候都被发给777个电子币. 规则是:猜 ...

  2. Java实现 泊松分酒

    泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊松分酒& ...

  3. Zabbix 邮箱告警(Python脚本)

    Python 脚本内容 #!/bin/env python #coding:utf- import smtplib from email.mime.text import MIMEText from ...

  4. 环境篇:CM+CDH6.3.2环境搭建(全网最全)

    环境篇:CM+CDH6.3.2环境搭建(全网最全) 一 环境准备 1.1 三台虚拟机准备 Master( 32g内存 + 100g硬盘 + 4cpu + 每个cpu2核) 2台Slave( 12g内存 ...

  5. 关于宝塔面板ftp+sublime

    如果sublime通过ftp上传文件传不上去,我的问题在于应该把sftp-config.json中"remote_path": "/",设置成这样.一下午.哎呀 ...

  6. [转] Ubuntu的apt-get 设置代理的方法

    点击阅读原文 新立得软件管理器这种图形化的代理设置很明了,这里介绍下终端命令行的网络代理设置,这样大家就可以通过代理进行apt-get了. 方法一: 如果只是想临时使用http代理,可以在使用apt- ...

  7. 《大话数据库》-SQL语句执行时,底层究竟做了什么小动作?

    <大话数据库>-SQL语句执行时,底层究竟做了什么小动作? 前言 大家好,我是Taoye,试图用玩世不恭过的态度对待生活的Coder. 现如今我们已然进入了大数据时代,无论是业内还是业外的 ...

  8. 关于JSON数据体积优化的一点小心得

    最近在做的一个项目里传输的json数据比较大,造成了线程间的卡顿,于是想优化一下json数据的体积. 可以看到在json文件里有很多无用的字段,这些字段占据了大量的存储空间. 对数据的结构作一下优化, ...

  9. matlab 梯度法(最速下降法)

    norm(A,p)当A是向量时norm(A,p) Returns sum(abs(A).^zhip)^(/p), for any <= p <= ∞.norm(A) Returns nor ...

  10. TensorFlow从0到1之程序结构(5)

    TensorFlow 与其他编程语言非常不同. 首先通过将程序分为两个独立的部分,构建任何拟创建神经网络的蓝图,包括计算图的定义及其执行.起初这对于传统程序员来说看起来很麻烦,但是正是图定义和执行的分 ...