Ant design 组件实现动态列表

2023-11-19


一、动态列表

动态列表Form.List是包含多个表单的情况,往往是多维数组数据,意思就是往往这个数据传递到后端是数组数据。
在这里插入图片描述

二、场景实现

实现效果

在这里插入图片描述

实现代码

import React from "react";
import _ from "lodash";
import "./index.less";
import { PlusCircleOutlined, CloseCircleFilled } from "@ant-design/icons";
import { Typography, Form, Input, Select, Space, Button } from "antd";

const App = () => {
  const [form] = Form.useForm();

  const onFinish = async () => {
    const values = await form.validateFields();
    console.log("Received values of form:", values);
  };

  return (
    <Form
      form={form}
      layout="vertical"
      name="dynamic_form_nest_item"
      onFinish={onFinish}
      autoComplete="off"
    >
      <Form.Item label="商品资源">
        <Form.List name={"source"}>
          {(fields, { add, remove }, { errors }) => (
            <>
              {fields.map((field) => (
                <div className="source-list-item" key={field.key}>
                  <Space align="baseline">
                    <Form.Item
                      label="商品类别"
                      validateTrigger="onBlur"
                      name={[field.name, "resourcesCategory"]}
                      rules={[
                        {
                          validator: (dom, v) =>
                            _.isEmpty(v)
                              ? Promise.reject("请选择商品类别")
                              : Promise.resolve()
                        }
                      ]}
                    >
                      <Select
                        autoFocus
                        options={[
                          { label: "果蔬鲜花", value: "果蔬鲜花" },
                          { label: "肉禽蛋品", value: "肉禽蛋品" }
                        ]}
                      ></Select>
                    </Form.Item>
                    <Form.Item
                      label="商品ID"
                      name={[field.name, "resourcesId"]}
                      validateTrigger="onBlur"
                      rules={[
                        {
                          validator: (dom, v) =>
                            _.isEmpty(v)
                              ? Promise.reject("请输入商品ID")
                              : Promise.resolve()
                        }
                      ]}
                    >
                      <Input />
                    </Form.Item>
                  </Space>
                  <CloseCircleFilled
                    onClick={() => remove(field.name)}
                    style={{ padding: "10px" }}
                  />
                </div>
              ))}
              <Form.ErrorList errors={errors} />
              <Form.Item style={{ marginBottom: 0 }}>
                <Typography.Link onClick={() => add()}>
                  <Space>
                    <PlusCircleOutlined /> 添加商品
                  </Space>
                </Typography.Link>
              </Form.Item>
            </>
          )}
        </Form.List>
      </Form.Item>
      <Form.Item>
        <Button type="primary" htmlType="submit">
          Submit
        </Button>
      </Form.Item>
    </Form>
  );
};

export default App;

.source-list-item {
  display: flex;
  align-items: center;
  margin-bottom: 10px;
  > .ant-space {
    display: flex;
    width: 100%;
    background: #f5f5f5;
    padding: 10px 20px 0 30px;
    > .ant-space-item {
      flex: 1 1 50%;
    }
  }
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ant design 组件实现动态列表 的相关文章

随机推荐

  • Jupyter Error “bad file descriptor“ in VSCode

    Jupyter Error bad file descriptor in VSCode 直接跑这一行 pip install upgrade force reinstall no cache dir jupyter
  • 已知斐波那契数列 1 1 2 3 5 8… ,求出第10项的值

    1 1 1 2 3 5 8 首先我们可以在这些数中找到规律 斐波那契数列的规定是固定的 从第三项开始等于前两项的和 第一项和第二项固定为 1 在求第N项时 首先把前面两项相加 再重新给前两项赋值 2 我们可以把第三项设为 np 那第二项的值
  • iOS 17更新,让苹果失去了魅力!

    1 iOS17的更新缺乏新意 随着WWDC2023的落幕 苹果发布了iOS17的开发者测试版 不过 由于需要开发者账号才能抢先体验 许多果粉们无法第一时间尝试iOS17的新功能 但实际上 这次的更新并没有带来令人期待的亮点 放眼望去 iOS
  • 优秀软件测试工程师必备的8个能力!-(附思维导图)

    结合自己以往的工作经验 自己梳理出来一些材料 绝对原创 绝对干货 优秀的软件测试工程师必备的 8个能力 作为一名软件工程师 需要的能力并不多 但是要成为一名优秀的软件测试工程师 需要的能力就比较多了 自己整理出来8个方面 每个方面都会分成很
  • CLIP与CoOp代码分析

    CLIP与CoOp代码分析 CoOp是稍微改了下CLIP的text encoder CLIP代码 https github com OpenAI CLIP CoOp代码 https github com KaiyangZhou CoOp 输
  • 配置无线WLAN旁挂三层组网直接转发

    企业用户接入 WLAN 网络 以满足移动办公的最基本需求 且在覆盖区域内移动 发生漫游时 不影响用户的业务使用 使用 VLAN pool 作为业务 VLAN 可以避 免出现 IP 地址资源不足或者 IP 地址资源浪费 减小单个 VLAN 下
  • 有效的域名后缀列表

    Version 2016060300 Last Updated Fri Jun 3 07 07 01 2016 UTC AAA AARP ABB ABBOTT ABBVIE ABOGADO ABUDHABI AC ACADEMY ACCEN
  • ffmpeg命令详解_火爆抖音60帧视频制作教程详解

    针对目前火爆抖音的超清60帧视频 今晚写一篇详细的制作教程 供大家分享 声明 60帧视频制作教程详解 文章内容为本人原创 转载请注明出处 首先再做学做补帧教程之前 大家要明白帧率的提升只是画面流畅度的提升 而非画面清晰度的提升 但是两者是有
  • 怎么写文献综述

    文献综述是由原始文献中大量的数据 资料 不同观点加以梳理整合后所形成的 文献综述的撰写时要将客观资料与主观论断融为一体 但是不能述评鲜明的表达作者本人的观点和立场 文献综述需要包含以下内容 问题提出的背景 发展过程 基本理论 最新成就 存在
  • Unity3D 碰撞器和触发器

    对于碰撞器和触发器经常忘记用法 这次主要记录下以便于能够复习用 1 碰撞器 发生条件 1 碰撞的双方中一定至少要有一个Rigidbody存在 并且碰撞双方必须都要有碰撞体组件 2 碰撞双方若只有一个有刚体 那么那个刚体一定要处于运动的状态下
  • Redis爬坑记(一):incr命令和expire命令的误区

    关注公众号 要实现的功能 限制用户的每分钟的访问次数 一个有严重bug的代码 每次访问来了 就执行代码块二 当第一次访问 就走else语句 设置当前用户的次数为1 且设置该key的有效期是一分钟 在一分钟之内 第二次来访问了 就走if语句了
  • XSS常见的触发标签

    无过滤情况 img 图片加载错误时触发 img src x img src 1 鼠标指针移动到元素时触发 img src 1 鼠标指针移出时触发 img src 1 a a href https www qq com qq a a href
  • 微信小程序开发通过mock后台数据,如何使用mock模拟后台数据,以及在小程序中使用

    作为一名前端开发人员 应该有很多像我一样不会写后台接口 但是网上非常多的项目都是需要后台数据支持的 这个时候前端开发人员可能会犯愁 现在我给大家推荐一个网站 可以帮助我们简单模拟后代数据 1 首先 在该网址https www fastmoc
  • 实验1-FPGA编程入门

    文章目录 一 认识全加器 二 输入原理图实现1位加法器 一 半加器原理图输入 二 全加器原理图输入 三 Verilog语言实现全加器 四 总结 五 资料参考 一 认识全加器 一 半加器 1 逻辑分析 如下图所示 半加器只有两个输入和两个输出
  • Windows10自动更新-修改注册表

    Win r 输入 regedit 打开注册表 注册表路径 HKEY LOCAL MACHINE SYSTEM ControlSet001 Services wuauserv Parameters 后面加了个 disable 方便以后改回来
  • 比较两个 List 的值是否相等

    public static
  • python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    前言 1 环境准备 python3 6 requests xlrd openpyxl HTMLTestRunner api 2 目前实现的功能 封装requests请求方法 在excel填写接口请求参数 运行完后 重新生成一个excel报告
  • Flutter进阶实战 6-20 酷炫的路由动画-2

    前言 前面在路由动画1中我们介绍了 渐隐渐现过度动画 的使用 这里再介绍三种动画以及叠加动画的使用 一 缩放路由动画 return ScaleTransition scale Tween begin 0 0 end 1 0 animate
  • 保存文件为UTF8格式(Writing UTF-8 files in C++).

    都是简单的单词 我就不翻译了 原文地址 http mariusbancila ro blog 2008 10 20 writing utf 8 files in c Let s say you need to write an XML fi
  • Ant design 组件实现动态列表

    文章目录 一 动态列表 二 场景实现 实现效果 实现代码 一 动态列表 动态列表Form List是包含多个表单的情况 往往是多维数组数据 意思就是往往这个数据传递到后端是数组数据 二 场景实现 实现效果 实现代码 import React