国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ant.design(簡稱antd)中Form表單組件提交表單、表單數(shù)據(jù)效驗(yàn)、表單自定義效驗(yàn)、表單布局集合

這篇具有很好參考價(jià)值的文章主要介紹了ant.design(簡稱antd)中Form表單組件提交表單、表單數(shù)據(jù)效驗(yàn)、表單自定義效驗(yàn)、表單布局集合。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ??ant.design(簡稱antd)現(xiàn)在我們使用較為廣泛,web端中后臺表單使用非常廣泛,此遍文章集合了表單日常用法及使用注意事項(xiàng)。

? ? ? ? 下圖是UI目標(biāo)樣式圖? ? ? ? ? ? ? ?antd form表單,React,前端,javascript,react.js,html,css?

? ? ? ? ?1、以下是一個組件,首先引入ant相關(guān)依賴,在引入react相關(guān)依賴,主要使用了Form的2個內(nèi)置函數(shù)和Form.useWatch進(jìn)行監(jiān)聽指定字段,然后使用 form.setFieldsValue進(jìn)行字段值更新。

? ? ? ? 2、表單驗(yàn)證相關(guān)規(guī)則使用在Form.Item中配置rules即可,required設(shè)置為true是為必填項(xiàng),message為對應(yīng)的提示信息。

? ? ? ? 3、onFinish函數(shù)是在按鈕設(shè)置了htmlType="submit"屬性,在點(diǎn)擊效驗(yàn)規(guī)則全部通過時觸發(fā)的函數(shù)。

? ? ? ? 4、onFinishFailed函數(shù)是在按鈕設(shè)置了htmlType="submit"屬性,在點(diǎn)擊效驗(yàn)規(guī)則有部分未通過效驗(yàn)時觸發(fā)的函數(shù)。

????????注意:Form.List 下的字段不應(yīng)該配置?initialValue,你始終應(yīng)該通過 Form.List 的?initialValue?或者 Form 的?initialValues?來配置。

????????Form.useWatch#

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

4.20.0?新增,用于直接獲取 form 中字段對應(yīng)的值。通過該 Hooks 可以與諸如?useSWR?進(jìn)行聯(lián)動從而降低維護(hù)成本:

 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="規(guī)則名稱"
          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="地點(diǎn)"
                        rules={[
                          {
                            required: true,
                            message: '請輸入內(nèi)容',
                          },
                        ]}
                      >
                        <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;

????????大家在使用過程中有問題的,可以在評論區(qū)留言文章來源地址http://www.zghlxwxcb.cn/news/detail-644550.html

到了這里,關(guān)于ant.design(簡稱antd)中Form表單組件提交表單、表單數(shù)據(jù)效驗(yàn)、表單自定義效驗(yàn)、表單布局集合的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue3 antd項(xiàng)目實(shí)戰(zhàn)——Form表單的重置【使用resetFields()重置form表單數(shù)據(jù)、清空輸入框】

    vue3 antd項(xiàng)目實(shí)戰(zhàn)——Form表單的重置【使用resetFields()重置form表單數(shù)據(jù)、清空輸入框】

    文章內(nèi)容 文章鏈接 Form表單 提交和校驗(yàn) 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表單的 動態(tài)校驗(yàn)規(guī)則 https://blog.csdn.net/XSL_HR/article/details/128437275?spm=1001.2014.3001.5501 往期文章

    2024年02月02日
    瀏覽(42)
  • Ant Design 使用出現(xiàn) Error: Can‘t resolve ‘~antd/dist/antd.css‘

    Ant Design 使用出現(xiàn) Error: Can‘t resolve ‘~antd/dist/antd.css‘

    在運(yùn)行Recat-Ant Design項(xiàng)目安裝依賴時發(fā)現(xiàn)控制臺報(bào)錯 發(fā)現(xiàn)是css引入文件路徑有問題,沿著這個路徑找可以看到引入文件已經(jīng)改名了 去文檔官網(wǎng)看了一下在5.2.2版本中的引入文件名確實(shí)已經(jīng)改變了 其實(shí)就是版本升級問題 改變文件名,項(xiàng)目就成功啟動了 而且在這個版本中的Ant

    2024年02月11日
    瀏覽(26)
  • form表單提交數(shù)據(jù)如何拿到返回值

    form表單提交數(shù)據(jù)如何拿到返回值

    使用form表單提交參數(shù)的時候,是依據(jù)input框里面的name值傳給后端的,只需在form節(jié)點(diǎn)添加action以及提交方式就可以調(diào)通前后端。但是這種直接的操作是不能夠判斷接口是否調(diào)通的,是拿不到返回值的。這就意味著不能夠做對應(yīng)的操作。 1:引入jquery.form.js的插件,這是一個jqu

    2024年02月06日
    瀏覽(28)
  • Ant Design Form.List基礎(chǔ)用法

    Ant Design Form.List基礎(chǔ)用法

    項(xiàng)目中需要在新增可以多個如圖 代碼如下 其中add 方法可以添加參數(shù),為添加的默認(rèn)參數(shù) 注意: {…field} 一定要放在 name={[field.name,‘XXX’]} 的前面,否則就會出錯 以上共勉

    2024年02月07日
    瀏覽(23)
  • form表單提交數(shù)據(jù)的兩種方式——submit直接提交、AJAX提交

    form表單本身提供action屬性,在action屬性中填寫數(shù)據(jù)提交地址后,點(diǎn)擊submit類型的按鈕即可將數(shù)據(jù)提交至指定地址,代碼如下: 注意: method指定請求方式 每個input表單項(xiàng)需要有name屬性 通過上述方式提交表單數(shù)據(jù)后,會發(fā)生頁面跳轉(zhuǎn),跳轉(zhuǎn)至action所指定的地址,很難滿足開發(fā)

    2024年02月13日
    瀏覽(27)
  • 【Antd】antd form表單的rules文案無法跟隨狀態(tài)重渲染的原因及解決辦法

    問題背景 我有兩個表單項(xiàng),當(dāng)我選擇出庫類型,調(diào)用onChange改變inOutType 狀態(tài),這時候發(fā)現(xiàn)這句代碼不生效: 示例代碼 原因 antd官方為了盡量少造成多余的渲染,把這個主動權(quán)交由開發(fā)者自己來實(shí)現(xiàn),適配更多場景,得到相對優(yōu)秀的渲染性能 解決代碼

    2024年02月13日
    瀏覽(19)
  • 小試Blazor——實(shí)現(xiàn)Ant Design Blazor動態(tài)表單

    小試Blazor——實(shí)現(xiàn)Ant Design Blazor動態(tài)表單

    前言 最近想了解下Blazor,于是嘗試使用Blazor寫一個簡單的低代碼框架,于是就采用了Ant Design Blazor作為組件庫 低代碼框架在表現(xiàn)層的第一步則是動態(tài)表單,需要將設(shè)計(jì)時的結(jié)構(gòu)渲染成運(yùn)行時的表單,本次主要實(shí)現(xiàn)動態(tài)表單,相關(guān)數(shù)據(jù)接口都以返回固定數(shù)據(jù)的形式實(shí)現(xiàn) 實(shí)現(xiàn)

    2024年02月10日
    瀏覽(24)
  • Ant Design4中Form.List和shouldUpdate一起使用的坑

    Ant Design4中Form.List和shouldUpdate一起使用的坑

    ????????在antd3.x版本中,如果要實(shí)現(xiàn)一組表單增加刪除的功能,需要Array.map()加上state狀態(tài)來控制,代碼比較復(fù)雜,而且非常不優(yōu)雅。 ????????其次在antd3.x中,表單中任何一個表單項(xiàng)的內(nèi)容更新都會觸發(fā)頁面重新渲染,這在一個巨型表單頁面上簡直是災(zāi)難。(但是這對

    2024年02月12日
    瀏覽(16)
  • 【已解決】React Antd Form.List 表單校驗(yàn)無飄紅提示的問題

    【已解決】React Antd Form.List 表單校驗(yàn)無飄紅提示的問題

    我想對 Form.List 構(gòu)建的表單進(jìn)行校驗(yàn),比如下拉框中的內(nèi)容應(yīng)當(dāng)至少有一個 XX,表單的長度不能少于多少等等對 List 內(nèi)容進(jìn)行校驗(yàn),并給出飄紅提示 比如我有這樣一段代碼來實(shí)現(xiàn)對 list 具體內(nèi)容的校驗(yàn),但是寫完后發(fā)現(xiàn)沒有提示,打 console.log 發(fā)現(xiàn)也能進(jìn)入到 throw new Error 里面

    2024年02月15日
    瀏覽(33)
  • vue3 antd項(xiàng)目實(shí)戰(zhàn)——Form表單的重置與清空【resetFields重置表單未生效(手寫重置函數(shù))】

    vue3 antd項(xiàng)目實(shí)戰(zhàn)——Form表單的重置與清空【resetFields重置表單未生效(手寫重置函數(shù))】

    文章內(nèi)容 文章鏈接 Form表單 提交和校驗(yàn) 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表單的 動態(tài)校驗(yàn)規(guī)則 https://blog.csdn.net/XSL_HR/article/details/128437275?spm=1001.2014.3001.5501 From表單的

    2024年02月02日
    瀏覽(58)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包