ant.design(简称antd)中Form表单组件提交表单、表单数据效验、表单自定义效验、表单布局集合

这篇具有很好参考价值的文章主要介绍了ant.design(简称antd)中Form表单组件提交表单、表单数据效验、表单自定义效验、表单布局集合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        ant.design(简称antd)现在我们使用较为广泛,web端中后台表单使用非常广泛,此遍文章集合了表单日常用法及使用注意事项。

        下图是UI目标样式图               antd form表单,React,前端,javascript,react.js,html,css 

         1、以下是一个组件,首先引入ant相关依赖,在引入react相关依赖,主要使用了Form的2个内置函数和Form.useWatch进行监听指定字段,然后使用 form.setFieldsValue进行字段值更新。

        2、表单验证相关规则使用在Form.Item中配置rules即可,required设置为true是为必填项,message为对应的提示信息。

        3、onFinish函数是在按钮设置了htmlType="submit"属性,在点击效验规则全部通过时触发的函数。

        4、onFinishFailed函数是在按钮设置了htmlType="submit"属性,在点击效验规则有部分未通过效验时触发的函数。

        注意:Form.List 下的字段不应该配置 initialValue,你始终应该通过 Form.List 的 initialValue 或者 Form 的 initialValues 来配置。

        Form.useWatch#

    type Form.useWatch = (namePath: NamePath, formInstance?: FormInstance): Value

4.20.0 新增,用于直接获取 form 中字段对应的值。通过该 Hooks 可以与诸如 useSWR 进行联动从而降低维护成本:

 form.setFieldsValue({
      bbsiRuleArrangeVos: bbsiRuleArrangeVos,
 });
import { Space, Table, Form, Input, Button, Radio, Select, Divider, DatePicker } from 'antd';
import { EyeOutlined, DeleteOutlined, ToolOutlined, PlusOutlined, MinusCircleOutlined } from '@ant-design/icons';
import React, { useEffect, useState, useRef } from 'react';

import { useHistory, useRequest } from 'umi';

import styles from './index.less';
import moment from 'moment';

const { RangePicker } = DatePicker;
const { TextArea } = Input;
function addRule() {
  
  const history = useHistory();
  const addRuleRef = useRef();
  const [form] = Form.useForm();
  const bbsiRuleArrangeVos = Form.useWatch('bbsiRuleArrangeVos', form);
  
  const onFinish = (values) => {
    console.log('Success:', values, bbsiRuleArrangeVos);
    const { ruleName, signingMethod, bbsiRuleArrangeVos,templeteId } = values;
    handleArray(bbsiRuleArrangeVos);
  };

  const handleArray = (arr) => {
    if (Array.isArray(arr)) {
      arr.map((item) => {
        item.signInBeginTime = item.signInTime ? moment(item.signInTime?.[0]).format('YYYY-MM-DD HH:mm:ss') : '';
        item.signInEndTime = item.signInTime ? moment(item.signInTime?.[1]).format('YYYY-MM-DD HH:mm:ss') : '';
        delete item.btn
        delete item.signInTime
        return item;
      });
    }
  };

  const onFinishFailed = (errorInfo) => {
    console.log('Failed:', errorInfo);
  };

  const addPeoleFunc = (index) => {
    bbsiRuleArrangeVos[index].btn = index;
    setPeopleIndex(index);
    addRuleRef.current.openModel();
    //更新字段值
    form.setFieldsValue({
      bbsiRuleArrangeVos: bbsiRuleArrangeVos,
    });
  };

  return (
    <div className={styles.SignRuleAddRule}>
      <Form
        name="basic"
        onFinish={onFinish}
        onFinishFailed={onFinishFailed}
        form={form}
      >
        <Form.Item
          label="规则名称"
          name="ruleName"
          rules={[
            {
              required: true,
              message: '请输入!',
            },
          ]}
          labelCol={{
            span: 2,
          }}
          wrapperCol={{
            span: 4,
          }}
        >
          <Input />
        </Form.Item>
        <Form.Item
          labelCol={{
            span: 2,
          }}
          wrapperCol={{
            span: 4,
          }}
          label="签约方式"
          name="signingMethod"
          rules={[
            {
              required: true,
              message: '请选择签约方式!',
            },
          ]}
        >
          <Radio.Group>
            <Radio value="1"> 线上签约 </Radio>
            <Radio value="2"> 线下签约 </Radio>
          </Radio.Group>
        </Form.Item>
        <Form.Item
          labelCol={{
            span: 2,
          }}
          wrapperCol={{
            span: 4,
          }}
          label="签约告知书"
          name="templeteId"
        >
          <Select>
            {SelectByTypeArr.map((item, index) => {
              return (
                <Select.Option value={item.templeteId} key={index}>
                  {item.templeteName}
                </Select.Option>
              );
            })}
          </Select>
        </Form.Item>
        <Divider />
        <Form.List name="bbsiRuleArrangeVos" layout="horizontal">
          {(fields, { add, remove }) => (
            <>
              {fields.map(({ key, name, ...restField }, index) => (
                <div
                  style={{ border: '1px dashed #73aff2', backgroundColor: '#f5faff', padding: '20px', marginBottom: 8 }}
                >
                  <Space
                    style={{
                      display: 'flex',
                      justifyContent: 'space-between',
                      alignItems: 'flex-start',
                    }}
                  >
                    <Space
                      key={index}
                      style={{
                        display: 'flex',
                        marginBottom: 8,
                        flexDirection: 'column',
                      }}
                      align="baseline"
                      wrap
                    >
                      <Form.Item
                        name={[name, 'signInTime']}
                        label="签约时间"
                        {...restField}
                        rules={[
                          {
                            required: true,
                            message: '请选择日期',
                          },
                        ]}
                      >
                        <RangePicker showTime format="YYYY-MM-DD HH:mm:ss" />
                      </Form.Item>

                      <Form.Item
                        {...restField}
                        name={[name, 'signAddress']}
                        label="地点"
                        rules={[
                          {
                            required: true,
                            message: '请输入内容',
                          },
                        ]}
                      >
                        <TextArea rows={5} />
                      </Form.Item>
                      <Form.Item name={[name, 'btn']}>
                        <Button onClick={() => addPeoleFunc(index)}>+添加人员</Button>
                      </Form.Item>
                    </Space>
                    <Space>
                      <DeleteOutlined />
                      <span style={{ color: '#fb595a', cursor: 'pointer' }} onClick={() => remove(name)}>
                        删除安排
                      </span>
                    </Space>
                  </Space>
                </div>
              ))}
              <Form.Item
                labelCol={{
                  span: 4,
                }}
                wrapperCol={{
                  span: 12,
                }}
                style={{ justifyContent: 'center' }}
              >
                <Button type="dashed" onClick={() => add()} block icon={<PlusOutlined />}>
                  添加安排
                </Button>
              </Form.Item>
            </>
          )}
        </Form.List>
        <Form.Item style={{ justifyContent: 'center' }}>
          <Space
            size="large"
            style={{
              justifyContent: 'center',
              width: '100%',
            }}
          >
            <Button type="primary" htmlType="submit">
              确定
            </Button>
            <Button>取消</Button>
          </Space>
        </Form.Item>
      </Form>
     
    </div>
  );
}

export default addRule;

        大家在使用过程中有问题的,可以在评论区留言文章来源地址https://www.toymoban.com/news/detail-644550.html

到了这里,关于ant.design(简称antd)中Form表单组件提交表单、表单数据效验、表单自定义效验、表单布局集合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 antd项目实战——Form表单的重置【使用resetFields()重置form表单数据、清空输入框】

    文章内容 文章链接 Form表单 提交和校验 https://blog.csdn.net/XSL_HR/article/details/128495087?spm=1001.2014.3001.5501 Form表单的 嵌套使用 https://blog.csdn.net/XSL_HR/article/details/128488913?spm=1001.2014.3001.5501 Form表单的 动态校验规则 https://blog.csdn.net/XSL_HR/article/details/128437275?spm=1001.2014.3001.5501 往期文章

    2024年02月02日
    浏览(38)
  • Ant Design 使用出现 Error: Can‘t resolve ‘~antd/dist/antd.css‘

    在运行Recat-Ant Design项目安装依赖时发现控制台报错 发现是css引入文件路径有问题,沿着这个路径找可以看到引入文件已经改名了 去文档官网看了一下在5.2.2版本中的引入文件名确实已经改变了 其实就是版本升级问题 改变文件名,项目就成功启动了 而且在这个版本中的Ant

    2024年02月11日
    浏览(25)
  • form表单提交数据如何拿到返回值

    使用form表单提交参数的时候,是依据input框里面的name值传给后端的,只需在form节点添加action以及提交方式就可以调通前后端。但是这种直接的操作是不能够判断接口是否调通的,是拿不到返回值的。这就意味着不能够做对应的操作。 1:引入jquery.form.js的插件,这是一个jqu

    2024年02月06日
    浏览(64)
  • Ant Design Form.List基础用法

    项目中需要在新增可以多个如图 代码如下 其中add 方法可以添加参数,为添加的默认参数 注意: {…field} 一定要放在 name={[field.name,‘XXX’]} 的前面,否则就会出错 以上共勉

    2024年02月07日
    浏览(32)
  • form表单提交数据的两种方式——submit直接提交、AJAX提交

    form表单本身提供action属性,在action属性中填写数据提交地址后,点击submit类型的按钮即可将数据提交至指定地址,代码如下: 注意: method指定请求方式 每个input表单项需要有name属性 通过上述方式提交表单数据后,会发生页面跳转,跳转至action所指定的地址,很难满足开发

    2024年02月13日
    浏览(31)
  • 【Antd】antd form表单的rules文案无法跟随状态重渲染的原因及解决办法

    问题背景 我有两个表单项,当我选择出库类型,调用onChange改变inOutType 状态,这时候发现这句代码不生效: 示例代码 原因 antd官方为了尽量少造成多余的渲染,把这个主动权交由开发者自己来实现,适配更多场景,得到相对优秀的渲染性能 解决代码

    2024年02月13日
    浏览(24)
  • 小试Blazor——实现Ant Design Blazor动态表单

    前言 最近想了解下Blazor,于是尝试使用Blazor写一个简单的低代码框架,于是就采用了Ant Design Blazor作为组件库 低代码框架在表现层的第一步则是动态表单,需要将设计时的结构渲染成运行时的表单,本次主要实现动态表单,相关数据接口都以返回固定数据的形式实现 实现

    2024年02月10日
    浏览(34)
  • Ant Design4中Form.List和shouldUpdate一起使用的坑

            在antd3.x版本中,如果要实现一组表单增加删除的功能,需要Array.map()加上state状态来控制,代码比较复杂,而且非常不优雅。         其次在antd3.x中,表单中任何一个表单项的内容更新都会触发页面重新渲染,这在一个巨型表单页面上简直是灾难。(但是这对

    2024年02月12日
    浏览(29)
  • 【已解决】React Antd Form.List 表单校验无飘红提示的问题

    我想对 Form.List 构建的表单进行校验,比如下拉框中的内容应当至少有一个 XX,表单的长度不能少于多少等等对 List 内容进行校验,并给出飘红提示 比如我有这样一段代码来实现对 list 具体内容的校验,但是写完后发现没有提示,打 console.log 发现也能进入到 throw new Error 里面

    2024年02月15日
    浏览(37)
  • vue3 antd项目实战——Form表单的重置与清空【resetFields重置表单未生效(手写重置函数)】

    文章内容 文章链接 Form表单 提交和校验 https://blog.csdn.net/XSL_HR/article/details/128495087?spm=1001.2014.3001.5501 Form表单的 嵌套使用 https://blog.csdn.net/XSL_HR/article/details/128488913?spm=1001.2014.3001.5501 Form表单的 动态校验规则 https://blog.csdn.net/XSL_HR/article/details/128437275?spm=1001.2014.3001.5501 From表单的

    2024年02月02日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包