当前位置: 首页 > web >正文

Ant Design动态增加表单项

Ant Design中的from表单里可以实现动态增加表单,以下就是结合table表格modal模态框来进行实现的一个过程。

import React, { useState } from 'react'
import { Button, Table, Modal, Form, Input, Upload, App } from 'antd'export default function index() {const [addData, setAddData] = useState(null)const [addModal, setAddModal] = useState(false)const [playImages, setPlayImages] = useState([])const [form] = Form.useForm()const columnsAdd = [{title: '人员信息数量',dataIndex: 'usernum',key: 'usernum',render: (count: number) => `已添加 ${count} 条人员信息`,},]// 添加人员const addPerson = () => {form.validateFields().then((values) => {const personCount = values.personinfo?.length || 0setAddData({usernum: personCount,key: Date.now(),})setAddModal(false)form.resetFields()})}// 上传图片const addImg = (info: any, index: number) => {console.log('info', info)setPlayImages([...playImages, info.fileList])}// 上传图片前的校验const beforeUpload = (file: any) => {console.log('file', file)}return (<div><divstyle={{marginTop: '-30px',textAlign: 'right',}}><Buttontype="primary"onClick={() => setAddModal(true)}disabled={addModal ? true : false}>添加人员</Button>{/* 添加人员配置表格 */}<TabledataSource={addData ? [addData] : []}columns={columnsAdd}pagination={false}/></div><Modalopen={addModal}onCancel={() => setAddModal(false)}onOk={addPerson}title="添加人员"><Form form={form}><Form.List name="personinfo">{(fields, { add, remove }) => (<>{fields.map((field, index) => (<div style={{ display: 'flex' }}><Form.Itemlabel={`人员信息${index + 1}`}key={field.key}><div key={field.key}><Form.Itemlabel="姓名"name={[field.name,'username',]}><Input /></Form.Item><Form.Itemlabel="年龄"name={[field.name,'userage',]}><Input /></Form.Item><Form.Itemlabel="上传头像"name={[field.name,'userimg',]}><Upload// 接受上传的文件类型accept=".jpg,.png"// 上传图片的接口地址action={`img_upload`}// 上传图片的文件列表,fileList={playImages[index] ||[]}onChange={(info) =>addImg(info, index)}// 上传图片前的钩子,校验方法beforeUpload={beforeUpload}// 上传图片的最大数量maxCount={1}><Button>上传图片</Button></Upload></Form.Item></div></Form.Item>{fields.length > 1 ? (<ButtononClick={() =>remove(field.name)}>-</Button>) : null}</div>))}{/* 按钮居中 */}<Form.Itemstyle={{textAlign: 'center',}}><Buttontype="dashed"onClick={() => add()}style={{ width: '300px' }}>+添加人员</Button></Form.Item></>)}</Form.List></Form></Modal></div>)
}
http://www.xdnf.cn/news/12015.html

相关文章:

  • 使用Prometheus+Grafana+Alertmanager+Webhook-dingtalk搭建监控平台
  • simulink这边重新第二次仿真时,直接UE5崩溃,然后simulink没有响应
  • AReaL-boba²:开源异步强化学习训练系统的革命性突破
  • 【C/C++】进一步介绍idl编码
  • RAG系统中的Re-ranking引擎选择指南
  • BERT vs Rasa 如何选择 Hugging Face 与 Rasa 的区别 模型和智能体的区别
  • 前端面试总结
  • 【从0-1的HTML】第3篇:html引入css的3种方式
  • CentOS 7 修改为静态 IP 地址完整指南
  • Visual Studio如何引入第三方头文件——以部署OpenGL为例
  • [蓝桥杯]对局匹配
  • xcode 各版本真机调试包下载
  • ESP32S3 LVGL超大字体
  • 「Java教案」顺序结构
  • innovus: defOutBySection应用
  • CentOS7关闭防火墙、Linux开启关闭防火墙
  • Linux网络协议栈:从Socket到网卡的星辰大海
  • TPU(张量处理单元)和 TVM(张量虚拟机)深度分析
  • 华为VanillaNet遇上BiFPN:YOLOv8的性能突破之旅
  • ASP.NET Core 中间件深度解析:构建灵活高效的请求处理管道
  • 隐藏层-机器学习
  • Kafka 消息队列
  • Python爬虫实战:研究Scrapy-Splash库相关技术
  • [特殊字符] FFmpeg 学习笔记
  • python做题日记(12)
  • 打卡Day44
  • Python 解释器安装全攻略(适用于 Linux / Windows / macOS)
  • 【PmHub面试篇】PmHub 整合 TransmittableThreadLocal(TTL)缓存用户数据面试专题解析
  • MySQL 5.6 Root密码修改完整流程
  • video-audio-extractor:视频转换为音频