亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

react+ant design實現Table的增、刪、改的示例代碼

2024-05-06 16:47:19
字體:
來源:轉載
供稿:網友

本人小白一名,第一次學習react ,該資料為本人原創,采用的是react+ant design的Tabled的一個小demo,暫時只實現了增加,刪除單行,多行刪除有Bug,查看詳情,嘔心瀝血耗時一周完成,禁止抄襲,轉載請先留言,

1、main.jsx

import React from 'react';import ReactDom from 'react-dom';import ExampleTable from './ExampleTable.jsx' ReactDom.render(  <ExampleTable/>,  document.getElementById('AppRoot'));

2、ExampleTable.jsx, 注:記住引入antd.css, 否則Table組件無法正常顯示。

import React from 'react';import { Table,Button,Input,Icon,Popconfirm,Alert } from 'antd';import AddUser from './AddUser.jsx'import UserDetails from './UserDetails.jsx' class ExampleTable extends React.Component {  constructor(props) {//  構造函數    super(props);    this.state = {      dataSource:[        { key: 1, nid:1, name: 'tab', gender:'男' , age: 22, schoolname: '第一中學', description: '熱愛班級活動,尊敬老師'},        { key: 2, nid:2, name: 'shift', gender:'男' , age: 22, schoolname: '第一中學', description: '熱愛班級活動,尊敬老師'},        { key: 6, nid:6, name: 'ctrl', gender:'男' , age: 22, schoolname: '第一中學', description: '熱愛班級活動,尊敬老師'},        { key: 4, nid:4, name: 'caps lock', gender:'男' , age: 22, schoolname: '第一中學', description: '熱愛班級活動,尊敬老師'},        { key: 5, nid:5, name: 'enter', gender:'女' , age: 22, schoolname: '第一中學', description: '熱愛班級活動,尊敬老師'}      ],      index : '',      PersonCount :0,      selectedRowKeys:[],      selectedRows:[],      record : 'abc'    };    this.onDelete = this.onDelete.bind(this);//綁定this,聲明該方法需要綁定this, 直接在onClick中調用    this.appendPerson = this.appendPerson.bind(this);    this.handleSelectedDelete = this.handleSelectedDelete.bind(this);    this.columns = [      { title: '編號', dataIndex: 'nid', key: 'nid' ,width:'8%'},      { title: '姓名', dataIndex: 'name', key: 'name' ,width:'15%'},      { title: '性別', dataIndex: 'gender', key: 'gender' ,width:'10%'},      { title: '年齡', dataIndex: 'age', key: 'age',width:'15%', },//render: (text, record, index) => (Math.floor(record.age/10))*10+"多歲"},      { title: '學校', dataIndex: 'schoolname', key: 'schoolname',width:'15%' },      { title: '在校表現', dataIndex: 'description', key: 'description' ,width:'20%'},      { title: '操作', dataIndex: '', key: 'operation', width:'32%',render: (text,record,index)=>(        <span>           <Popconfirm                <a                  <Icon type="delete"/></a>           </Popconfirm>          <span className="ant-divider"/>          <UserDetails className="user_details" pass={record}/>        </span>      ) },    ];    }   appendPerson(event){//得到子元素傳過來的值    let array = [];    let count = 0;    this.state.dataSource.forEach(function (element) {      Object.keys(element).some(function (key) {        if (key === 'nid') {          count++;          array[count] = element.nid        }      })    })    let sortData =array.sort();//對遍歷得到的數組進行排序    let MaxData = sortData[(this.state.dataSource.length)-1]//取最后一位下標的值    event.key=MaxData+1;    event.nid = MaxData+1;    this.setState({       dataSource:[...this.state.dataSource,event]     })   }   onDelete(index){      console.log(index)      const dataSource = [...this.state.dataSource];      dataSource.splice(index, 1);//index為獲取的索引,后面的 1 是刪除幾行      this.setState({ dataSource });  }   handleSelectedDelete(){    if(this.state.selectedRowKeys.length>0){      console.log(...this.state.selectedRowKeys)      const dataSource = [...this.state.dataSource]      dataSource.splice(this.state.selectedRows,this.state.selectedRows.length)      this.setState({ dataSource });    }    else{     }  }   render() {    //聯動選擇框    const rowSelection = {      onChange: (selectedRowKeys, selectedRows) => {        this.setState({//將選中的id和對象存入state            selectedRowKeys:selectedRowKeys,            selectedRows:selectedRows        })        console.log(selectedRows,selectedRowKeys)      },      onSelect: (record, selected, selectedRows) => {        //console.log( record, ` selected :${selected}`,`selectedRows:${selectedRows}`);      },      onSelectAll: (selected, selectedRows, changeRows) => {        //console.log(selected, selectedRows, changeRows);      },      getCheckboxProps: record => ({        disabled: record.name === 'Disabled User',  // Column configuration not to be checked      }),    }    return (      <div className="div_body">       <div id="div_left"></div>       <div id="div-right">         <div className="table_oftop">           <Button type="primary" icon="search" style={{float:"right",marginLeft:10}}>查詢</Button>           <Input placeholder="input search text" style ={{width:300,float:"right"}}/>           <div id="add_delete">           <Button type="primary" className="selectedDelete" onClick={this.handleSelectedDelete}>刪除所選</Button>           <AddUser className="add_user_btn" callback={this.appendPerson}/>           </div>         </div>        <Table columns={this.columns}            dataSource={this.state.dataSource}            className="table"            rowSelection={rowSelection}            scroll ={{y:400}}/>       </div>      </div>    );  }}module.exports = ExampleTable;

3、AddUser.jsx

import React from 'react';import {Form,Input,Button,Select,Modal} from 'antd'const FormItem = Form.Item;const Option = Select.Option; class AddUser extends React.Component{//在es6中定義一個AddUser類   constructor(props){//構造函數     super(props);     this.state = {       visible:false     };     this.handleAdd = this.handleAdd.bind(this);     this.handleSubmit = this.handleSubmit.bind(this);     this.handleOk = this.handleOk.bind(this)     this.handleClear = this.handleClear.bind(this)   }  handleAdd() {    this.setState({      visible: true    });  }  handleSubmit(e){//提交表單    e.preventDefault();     this.props.form.validateFieldsAndScroll((err,values)=>{       if(!err){         //console.log('接收的值:',values);         this.setState({           visible:false         })         this.props.form.resetFields();//清空提交的表單         //當值傳遞到父元素后,通過回調函數觸發appendPerson方法將參數values帶到父元素         this.props.callback(values);       }     })  }   handleClear(){    this.props.form.resetFields();  }   handleOk() {    this.setState({      visible: false      });  }  render(){    const {getFieldDecorator} = this.props.form;   const formItemLayout = {     labelCol:{span : 6},     wrapperCol:{span: 14}   };   const tailFormItemLayout = {     wrapperCol: {       span: 14,       offset: 8     }   };    return(      <div>        <Button type="primary" onClick={this.handleAdd}>添加用戶</Button>      <Modal        <Form onSubmit={this.handleSubmit}>          <FormItem {...formItemLayout} label = "用戶名" hasFeedback>            {getFieldDecorator('name', {              rules:[{                required:true,message:'請輸入您的 name!'              }]            })(              <Input placeholder="請輸入您的用戶名!"/>            )}            </FormItem>          <FormItem {...formItemLayout} label="性別" hasFeedback>            {getFieldDecorator('gender',{              rules:[{                required:true,message:'請輸入您的 gender!'              }]            })(              <Select placeholder="請選擇您的性別">                <Option value="男">男</Option>                <Option value="女">女</Option>              </Select>        )}          </FormItem>          <FormItem {...formItemLayout} label="年齡" hasFeedback>            {getFieldDecorator('age',{              rules:[{required:true,message:'請選擇您的 Age'              }]            })(              <Select placeholder="請選擇你您的年齡">                  <Option value="26">26</Option>                  <Option value="27">27</Option>                  <Option value="28">28</Option>              </Select>            )}          </FormItem>          <FormItem {...formItemLayout} label="就讀學校" hasFeedback>            {getFieldDecorator('schoolname',{              rules:[{required:true,message:'請輸入您的就讀學校'}]            })(              <Input placeholder="請輸入您的就讀學校!"/>            )}          </FormItem>          <FormItem {...formItemLayout} label="在校表現" hasFeedback>            {getFieldDecorator('description',{              rules:[{required:true,message:'請輸入您的在校表現'}]            })(              <Input type="textarea" rows={3} placeholder="請輸入您的在校表現!"/>            )}          </FormItem>          <FormItem {...tailFormItemLayout} style={{padding:10}}>            <Button type="primary" htmlType="submit" size="large">提交</Button>            <Button type="primary" size="large" onClick={this.handleClear}>重置</Button>          </FormItem>        </Form>      </Modal>      </div>    )  }}AddUser = Form.create()(AddUser); //解決了getFieldDecorator無法定義; export default AddUser;

4、UserDetails.jsx

import React from 'react'import {Modal,Button} from 'antd'/*  */class UserDetails extends React.Component{  constructor(props){    super(props);    this.state={      visible:false    }    this.handlePopup = this.handlePopup.bind(this);    this.handleOkOrCancel = this.handleOkOrCancel.bind(this);  }  handlePopup() {    this.setState({      visible: true    });  }  handleOkOrCancel(){    this.setState({      visible: false    });  }   render(){    return(      <div>        <a onClick={this.handlePopup}>詳情</a>        <Modal            onOk=  {this.handleOkOrCancel} onCancel={this.handleOkOrCancel}>          <p>姓名:  {this.props.pass.name}</p>          <p>性別:  {this.props.pass.gender}</p>          <p>年齡:   {this.props.pass.age}</p>          <p>就讀學校:  {this.props.pass.schoolname}</p>          <p>在校表現:  {this.props.pass.description}</p>        </Modal>      </div>    )  } } export default UserDetails;

5、ExampleStyle.css

#div-right{  width:80%;  height:400px;  text-Align:center;  margin: 0 auto;}.div_body{  margin-top: 0.5%;}.table_oftop{  padding: 10px;}.selectedDelete{  float: left;  margin-left: 35%;}.add_user_btn{  margin-left: auto;}.user_details{  float: right;}

ant design 官網地址:https://ant.design/components/table-cn/    看不懂的可以參考官方示例。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人久久精品视频| 日韩精品丝袜在线| 国产97在线|日韩| 亚洲性夜色噜噜噜7777| 亚洲国产美女精品久久久久∴| 欧美美最猛性xxxxxx| 久久久久久久一区二区| 欧美性色视频在线| 国产精品久久久久久久久久三级| 亚洲色图18p| 久久综合色影院| 亚洲自拍av在线| 亚洲精品综合久久中文字幕| 大伊人狠狠躁夜夜躁av一区| 国产视频欧美视频| 久久精品免费电影| 欧美色videos| 91日韩在线视频| 欧美高跟鞋交xxxxxhd| 亚洲国产精品久久久| 久久精品久久精品亚洲人| 欧美性猛交xxxx免费看久久久| 国产欧美日韩高清| 欧美性猛交99久久久久99按摩| 国产欧美最新羞羞视频在线观看| 亚洲男人天堂2019| 欧美激情亚洲综合一区| 久久久99久久精品女同性| yellow中文字幕久久| 久久久久久久国产精品| 清纯唯美日韩制服另类| 在线精品视频视频中文字幕| 亚洲欧洲激情在线| 国产精品美女呻吟| 成人淫片在线看| 国产在线精品自拍| 亚洲国产又黄又爽女人高潮的| 欧美疯狂性受xxxxx另类| 奇门遁甲1982国语版免费观看高清| 精品动漫一区二区| 欧美乱妇40p| 久久国产精品久久久| 国产亚洲精品久久久久久777| 亚洲欧洲成视频免费观看| 亚洲精品国产精品国产自| 亚洲欧洲日本专区| 久久精品国产91精品亚洲| 国产亚洲视频中文字幕视频| 成人久久久久久| 久久99久国产精品黄毛片入口| 狠狠久久五月精品中文字幕| 欧美激情精品久久久久久| 久99九色视频在线观看| 日韩电视剧免费观看网站| 97视频在线免费观看| 久久777国产线看观看精品| 欧美激情亚洲激情| 中文日韩在线视频| 疯狂做受xxxx高潮欧美日本| 69久久夜色精品国产7777| 久久亚洲精品成人| 国产精品高潮呻吟久久av黑人| 国产精品18久久久久久麻辣| 欧美裸体xxxx极品少妇| 久久精品国产亚洲一区二区| 一区二区三区亚洲| 欧美理论电影在线播放| 性金发美女69hd大尺寸| 57pao成人永久免费视频| 国产成人jvid在线播放| 亚洲free性xxxx护士hd| 久久久久久中文字幕| 亚洲人精选亚洲人成在线| 午夜免费久久久久| 日韩**中文字幕毛片| 久久久久久久电影一区| 欧美亚洲午夜视频在线观看| 国产成人拍精品视频午夜网站| 久久人人爽人人爽爽久久| 国产a∨精品一区二区三区不卡| 欧美性色19p| 精品人伦一区二区三区蜜桃网站| 色综合老司机第九色激情| 性色av一区二区三区红粉影视| 亚洲国产天堂网精品网站| 国产精品极品美女在线观看免费| 久久九九免费视频| 国产福利精品视频| 亚洲色图25p| 中文字幕精品影院| 麻豆成人在线看| 亚洲国产精品va在线看黑人动漫| 欧美精品在线看| 亚洲色图50p| 91在线色戒在线| 中文字幕在线观看亚洲| 亚洲欧美一区二区三区四区| 日韩激情av在线免费观看| 国产精品一区二区三区在线播放| 亚洲视频综合网| 亚洲精品一区二三区不卡| 在线观看精品自拍私拍| 91av福利视频| 欧美精品亚州精品| 伊人青青综合网站| 亚洲精品国产精品国自产在线| 欧美日韩亚洲成人| 日韩的一区二区| 亚洲最大福利网站| 成人久久久久久| 清纯唯美亚洲激情| 精品久久久久久亚洲国产300| 精品露脸国产偷人在视频| 色老头一区二区三区在线观看| 在线成人一区二区| 亚洲摸下面视频| 3344国产精品免费看| 色综合久久中文字幕综合网小说| 欧美国产精品人人做人人爱| 成人中文字幕在线观看| 亚洲黄页视频免费观看| 久热爱精品视频线路一| 国产精品久久久999| 亚洲国产精久久久久久| 国产成人avxxxxx在线看| 亚洲欧洲午夜一线一品| 日本亚洲欧洲色α| 欧美大片大片在线播放| 亚洲精品午夜精品| 国内精品伊人久久| 91chinesevideo永久地址| 精品成人乱色一区二区| 在线观看日韩视频| 国产日韩精品一区二区| 亚洲精品影视在线观看| 国产欧美久久久久久| 亚洲一区二区日本| 欧美在线影院在线视频| 精品国产一区二区三区久久狼5月| 一区二区欧美亚洲| 精品一区二区三区四区在线| 一本色道久久88综合日韩精品| 国产精品电影网| 一区二区欧美久久| 最新91在线视频| 国产精品亚洲片夜色在线| 亚洲欧美成人一区二区在线电影| 国产精自产拍久久久久久蜜| 国产香蕉精品视频一区二区三区| 久久综合网hezyo| 91久久精品国产91久久| 欧美日韩亚洲成人| 久久精视频免费在线久久完整在线看| 久久这里有精品视频| 亚洲美女中文字幕| 亚洲国产欧美一区二区丝袜黑人| 91精品视频播放| 日韩欧美中文字幕在线观看| 黑人精品xxx一区一二区| 国产999精品久久久影片官网| 色婷婷av一区二区三区久久| 欧美电影在线观看完整版| 久久99久久久久久久噜噜| 成人免费黄色网|