最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React如何利用Antd的Form組件實(shí)現(xiàn)表單功能詳解

 更新時(shí)間:2021年04月14日 10:55:06   作者:GuanJdoJ  
這篇文章主要給大家介紹了關(guān)于React如何利用Antd的Form組件實(shí)現(xiàn)表單功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、構(gòu)造組件

1、表單一定會(huì)包含表單域,表單域可以是輸入控件,標(biāo)準(zhǔn)表單域,標(biāo)簽,下拉菜單,文本域等。

這里先引用了封裝的表單域 <Form.Item />

2、使用Form.create處理后的表單具有自動(dòng)收集數(shù)據(jù)并校驗(yàn)的功能,但如果不需要這個(gè)功能,或者默認(rèn)的行為無(wú)法滿足業(yè)務(wù)需求,可以選擇不使用Form.create并自行處理數(shù)據(jù)

經(jīng)過(guò)Form.create()包裝過(guò)的組件會(huì)自帶this.props.form屬性,this.props.form提供了很多API來(lái)處理數(shù)據(jù),如getFieldDecorator——用于和表單進(jìn)行雙向綁定等,詳細(xì)參加Antd官方文檔:點(diǎn)擊此處查看

先展示表單樣式:

import React from 'react';
import {Form, Table, Button, Select, Input, DatePicker} from 'antd';
 
const FormItem = Form.Item;
const Option = Select.Option;
const {RangePicker} = DatePicker;//獲取日期選擇控件中的日期范圍控件
 
class UserManage extends React.Component {
  render() {
    const columns = [
      {
        title: '聯(lián)系人',
        dataIndex: 'userName',
        key: 'userName',
      }, {
        title: '手機(jī)號(hào)',
        dataIndex: 'mobile',
        key: 'mobile',
      }, {
        title: '公司名稱',
        dataIndex: 'companyName',
        key: 'companyName',
      }, {
        title: '最近活躍時(shí)間',
        dataIndex: 'lastOnlineTime',
        key: 'lastOnlineTime',
      }, {
        title: '禁言狀態(tài)',
        dataIndex: 'status',
        key: 'status',
      },
    ];
 
    return (
      <div>
        <Form layout="inline" style={{marginBottom: '10px'}}>
          <FormItem label="最近活躍時(shí)間">
            <RangePicker style={{width: '255px'}}/>
          </FormItem>
          <FormItem label="用戶">
            <Input type="text" placeholder="公司名稱、手機(jī)號(hào)" style={{width: '155px'}}/>
          </FormItem>
          <FormItem label="禁言狀態(tài)">
            <Select defaultValue="全部" style={{width: '155px'}}>
              <Option value="全部">全部</Option>
              <Option value="是">是</Option>
              <Option value="否">否</Option>
            </Select>
          </FormItem>
          <Button type="primary" style={{marginTop: '3px', marginRight: '3px'}}>查詢</Button>
          <Button style={{marginTop: '3px'}}>重置</Button>
        </Form>
        <Table
          columns={columns}
        />
      </div>
    )
  }
}
 
export default Form.create()(UserManage)

colums是Table組件的API,columns和Column組件使用相同的API:

dataIndex:列數(shù)據(jù)在數(shù)據(jù)項(xiàng)中對(duì)應(yīng)的 key,支持a.b.c的嵌套寫(xiě)法

key:React 需要的 key,如果已經(jīng)設(shè)置了唯一的dataIndex,可以忽略這個(gè)屬性

二、使用getFieldDecorator(id, options) 進(jìn)行表單交互

1、現(xiàn)在的問(wèn)題就是如何獲取各種查詢條件的數(shù)據(jù),所以先改寫(xiě)render()里面的代碼,getFieldDecorator用于和表單進(jìn)行雙向綁定:

...
render(){
    const {form} = this.props;
    const {getFieldDecorator} = form;
...
    return (
      <div>
        <Form onSubmit={this.handleQuery} layout="inline" style={{marginBottom: '10px'}}>
          <FormItem label="最近活躍時(shí)間">
            {getFieldDecorator('lastOnlineTime')(<RangePicker style={{width: '255px'}}/>)}
          </FormItem>
          <FormItem label="用戶">
            {getFieldDecorator('userQueryLike')(<Input type="text" placeholder="公司名稱或手機(jī)號(hào)" style={{width: '155px'}}/>)}
          </FormItem>
          <FormItem label="禁言狀態(tài)">
            {getFieldDecorator('status', {initialValue: "全部"})(
            <Select  style={{width: '155px'}}>
              <Option value="0">全部</Option>
              <Option value="1">是</Option>
              <Option value="2">否</Option>
            </Select>)}
          </FormItem>
          <Button type="primary" htmlType="submit" style={{marginTop: '3px', marginRight: '3px'}}>查詢</Button>
          <Button style={{marginTop: '3px'}}>重置</Button>
        </Form>
        <Table
          columns={columns} /*dataSource={(從model取得的數(shù)據(jù))}*/
        />
      </div>
    )
}
...

參數(shù) 說(shuō)明 類型 默認(rèn)值
id 必填輸入控件唯一標(biāo)志。支持嵌套式的寫(xiě)法。 string  
options.getValueFromEvent 可以把 onChange 的參數(shù)(如 event)轉(zhuǎn)化為控件的值 function(..args) reference
options.initialValue 子節(jié)點(diǎn)的初始值,類型、可選值均由子節(jié)點(diǎn)決定(注意:由于內(nèi)部校驗(yàn)時(shí)使用 === 判斷是否變化,建議使用變量緩存所需設(shè)置的值而非直接使用字面量))    
options.normalize 轉(zhuǎn)換默認(rèn)的 value 給控件 function(value, prevValue, allValues): any -
options.rules 校驗(yàn)規(guī)則,詳細(xì)參考Antd官方文檔 object[]  
options.trigger 收集子節(jié)點(diǎn)的值的時(shí)機(jī) string 'onChange'
options.validateFirst 當(dāng)某一規(guī)則校驗(yàn)不通過(guò)時(shí),是否停止剩下的規(guī)則的校驗(yàn) boolean false
options.validateTrigger 校驗(yàn)子節(jié)點(diǎn)值的時(shí)機(jī) string|string[] 'onChange'
options.valuePropName 子節(jié)點(diǎn)的值的屬性,如 Switch 的是 'checked' string 'value'

2、上面給了表單一個(gè)onSubmit事件,當(dāng)表單提交時(shí)執(zhí)行handleQuery方法:

...
class UserManage extends React.Component {
  //表單查詢
  handleQuery = (e) => {
    if (e) e.preventDefault();
    const {dispatch, form} = this.props;
    form.validateFields((err, fieldsValue) => {
      if (err) return;
      //獲取時(shí)間范圍的值
      const rangeValue = fieldsValue['lastOnlineTime'];
      const userQueryLike = fieldsValue['userQueryLike'];
      //獲取查詢條件
      const values = {
        ...fieldsValue,
        "lastOnlineTime": (rangeValue && rangeValue.length > 1) ?
          ([rangeValue[0].format('YYYY-MM-DD'), rangeValue[1].format('YYYY-MM-DD')]) : null,
        "userQueryLike": userQueryLike ? userQueryLike.trim() : userQueryLike,
      };
      dispatch({
        type: "userManageModel/getUserList",
        payload: {
          values: values,
        }
      });
 
    });
  };
...
}
...

在此方法里又調(diào)用了form.validateFields校驗(yàn)并獲取一組輸入域的值與Error,入?yún)ieldsValue就是從表單的FormItem里取到的值,然后使用fieldsValue['lastOnlineTime']這種形式,通過(guò)與之前寫(xiě)的getFieldDecorator('lastOnlineTime')產(chǎn)生映射,就獲取了單個(gè)輸入域的值。

總結(jié)一下,使用React的Form實(shí)現(xiàn)表單功能,必須要使用Form.create(組件),使包裝的組件帶有this.props.form屬性,才能調(diào)用form的getFieldDecorator和validateFields方法,getFieldDecorator中的id對(duì)應(yīng)validateFields中的fieldsValue[''];而columns中的dateIndex對(duì)應(yīng)的是從model取到數(shù)據(jù)json串的鍵名,這個(gè)要分清

除了這種方法,還有兩種實(shí)現(xiàn)獲取input輸入框的值然后提交的方法,可以看這篇文章:React獲取input的值并提交的兩種方法

總結(jié)

到此這篇關(guān)于React如何利用Antd的Form組件實(shí)現(xiàn)表單功能詳解的文章就介紹到這了,更多相關(guān)React用Form組件實(shí)現(xiàn)表單內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React中的useState和useEffect詳細(xì)解析

    React中的useState和useEffect詳細(xì)解析

    useState和useEffect是React的兩個(gè)重要Hook,用于組件狀態(tài)管理和處理副作用,useState允許添加狀態(tài)變量,控制組件渲染,而useEffect用于執(zhí)行渲染后的副作用操作,本文給大家介紹React中的useState和useEffect詳細(xì)解析,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • React實(shí)現(xiàn)原生APP切換效果

    React實(shí)現(xiàn)原生APP切換效果

    最近需要使用 Hybrid 的方式開(kāi)發(fā)一 個(gè) APP,交互和原生 APP 相似并且需要 IM 通信,本文給大家介紹了使用React實(shí)現(xiàn)原生APP切換效果,文中通過(guò)代碼示例講解的非常詳細(xì),感興趣的小伙伴跟著小編一起來(lái)看看吧
    2025-01-01
  • 使用react在修改state中的數(shù)組和對(duì)象數(shù)據(jù)的時(shí)候(setState)

    使用react在修改state中的數(shù)組和對(duì)象數(shù)據(jù)的時(shí)候(setState)

    這篇文章主要介紹了使用react在修改state中的數(shù)組和對(duì)象數(shù)據(jù)的時(shí)候(setState),具有很好的參考價(jià)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • React Hooks使用方法全方位介紹

    React Hooks使用方法全方位介紹

    在react類組件(class)寫(xiě)法中,有setState和生命周期對(duì)狀態(tài)進(jìn)行管理,但是在函數(shù)組件中不存在這些,故引入hooks(版本:>=16.8),使開(kāi)發(fā)者在非class的情況下使用更多react特性
    2023-03-03
  • ahooks useVirtualList 封裝虛擬滾動(dòng)列表

    ahooks useVirtualList 封裝虛擬滾動(dòng)列表

    這篇文章主要為大家介紹了ahooks useVirtualList 封裝虛擬滾動(dòng)列表詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • React?Hook?四種組件優(yōu)化總結(jié)

    React?Hook?四種組件優(yōu)化總結(jié)

    這篇文章主要介紹了React?Hook四種組件優(yōu)化總結(jié),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)孩子,需要的朋友可以參考一下
    2022-07-07
  • npx create-react-app xxx創(chuàng)建項(xiàng)目報(bào)錯(cuò)的解決辦法

    npx create-react-app xxx創(chuàng)建項(xiàng)目報(bào)錯(cuò)的解決辦法

    這篇文章主要介紹了npx create-react-app xxx創(chuàng)建項(xiàng)目報(bào)錯(cuò)的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • React事件處理過(guò)程中傳參的實(shí)現(xiàn)方法

    React事件處理過(guò)程中傳參的實(shí)現(xiàn)方法

    這篇文章主要介紹了React事件處理過(guò)程中傳參的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • ahooks封裝cookie?localStorage?sessionStorage方法

    ahooks封裝cookie?localStorage?sessionStorage方法

    這篇文章主要為大家介紹了ahooks封裝cookie?localStorage?sessionStorage的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Docker部署SpringBoot項(xiàng)目到云服務(wù)器的實(shí)現(xiàn)步驟

    Docker部署SpringBoot項(xiàng)目到云服務(wù)器的實(shí)現(xiàn)步驟

    Docker作為一種輕量級(jí)的容器化技術(shù),為開(kāi)發(fā)者提供了快速、便捷的部署方案,本文主要介紹了Docker部署SpringBoot項(xiàng)目到云服務(wù)器,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

天峨县| 日土县| 会宁县| 独山县| 汤阴县| 蕉岭县| 绥中县| 达州市| 舒城县| 刚察县| 乐陵市| 怀仁县| 诸暨市| 宣威市| 家居| 进贤县| 鹰潭市| 昭平县| 贺州市| 陆川县| 武强县| 嘉善县| 眉山市| 梅州市| 宜兴市| 宁波市| 临西县| 三原县| 长阳| 嘉义县| 东海县| 长顺县| 和龙市| 聂荣县| 申扎县| 庄河市| 阳东县| 阜平县| 巫山县| 曲沃县| 南召县|