前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录。最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star。


一、头部固定

  • scroll属性:设置横向或纵向滚动,也可用于指定滚动区域的宽和高

    <Card title="头部固定">
    <Table
    bordered
    columns={columns}
    dataSource={this.state.dataSource}
    pagination={false}
    scroll={{y: 240}}
    />
    </Card>

    此处:y方向限制的高度240px小于表格总高度,便可纵向滚动

二、左侧固定

  • 设置scoll属性:实现表格横向滚动

    <Card title="左侧固定" style={{margin: '10px 0'}}>
    <Table
    bordered
    columns={columns2}
    dataSource={this.state.dataSource}
    pagination={false}
    scroll={{x: 1130}}
    />
    </Card>

    此处:x方向限制的宽度1130px大于表格总宽度,便可横向滚动

  • 在column2表头设置中:给id和username添加fixed属性为left,实现id与用户名固定在左侧

     const columns2 = [
    {
    title: 'id', //表头标题
    key: 'id',
    width: 80,
    fixed: 'left',
    dataIndex: 'id' //数据源
    },
    {
    title: '用户名',
    key: 'userName',
    width: 80,
    fixed: 'left',
    dataIndex: 'userName'
    },

      

三、表格排序

  • onChange事件:分页、排序、筛选变化时触发

    <Card title="表格排序" style={{margin: '10px 0'}}>
    <Table
    bordered
    columns={columns3}
    dataSource={this.state.dataSource}
    pagination={false}
    onChange={this.handleChange}
    />
    </Card>
  • sorter函数:对某一列数据进行排序,通过指定列的 sorter 函数即可启动排序按钮

  1. 在column3表头设置中:给age年龄字段指定sorter函数,并添加sorterOrder属性

    {
    title: '年龄',
    dataIndex: 'age',
    key: 'age',
    sorter: (a, b) => {
    return a.age - b.age;
    },
    sortOrder: this.state.sortOrder
    }  
  2. handleChange方法中:传入sorter函数返回值,将当前排序状态sorter.order存入state中

    handleChange = (pagination, filters, sorter) => {
    this.setState({
    sortOrder: sorter.order
    })
    }

     

四、操作按钮

  • 徽标Badge组件
  1. 用不同的徽标,标识不同状态
  2. 在column4表头设置中:给state的config中引用Badge
    {
    title: '状态',
    dataIndex: 'state',
    key: 'state',
    render(state){
    let config = {
    '1': <Badge status="success" text="成功" />,
    '2': <Badge status="error" text="报错" />,
    '3': <Badge status="default" text="正常" />,
    '4': <Badge status="processing" text="进行中" />,
    '5': <Badge status="warning" text="警告" />,
    }
    return config[state]
    }
    }
  • 列中添加操作按钮

  1. render方法:生成复杂数据的渲染函数,参数分别为当前行的值text,当前行数据item,行索引index
  2. 直接在column4的最后一项中:render一个按钮,监听OnClick事件,传入当前行数据item

    {
    title: '操作',
    render: (text, item) => {
    //注意 this 为 render 方法内部的this
    return <Button size="small" onClick={(item) => {this.handleDelete(item)}}>删除</Button>
    }
    }
  3. 执行操作方法

    handleDelete = (item) => {
    let id = item.id;
    Modal.confirm({
    title: '确认',
    content: '您确认要删除此条数据吗?',
    onOk: () => {
    message.success('删除成功');
    this.request();
    }
    })
    }

五、实例代码  

  • pages->table->highTable.js:对应路由/admin/high

    import React from 'react'
    import {Card, Table, Modal, Button, message, Badge} from 'antd'
    import axios from '../../axios/index' export default class HighTables extends React.Component{
    state = {
    dataSource: []
    }
    params = {
    page: 1
    }
    componentDidMount(){
    this.request();
    }
    //动态获取mock数据
    request = () => {
    let _this = this;
    axios.ajax({
    url: '/table/list',
    data:{
    params:{
    page: this.params.page
    },
    // isShowLoading: false
    }
    }).then((res) => {
    if(res.code === 0){
    res.list.map((item, index) => {
    item.key = index
    })
    this.setState({
    dataSource: res.list
    })
    }
    })
    } handleChange = (pagination, filters, sorter) => {
    this.setState({
    sortOrder: sorter.order
    })
    } handleDelete = (item) => {
    let id = item.id;
    Modal.confirm({
    title: '确认',
    content: '您确认要删除此条数据吗?',
    onOk: () => {
    message.success('删除成功');
    this.request();
    }
    })
    } render(){
    const columns = [
    {
    title: 'id', //表头标题
    key: 'id',
    width: 80,
    dataIndex: 'id' //数据源
    },
    {
    title: '用户名',
    key: 'userName',
    width: 80,
    dataIndex: 'userName'
    },
    {
    title: '性别',
    dataIndex: 'sex',
    key: 'sex',
    width: 80,
    render(sex){
    return sex === 1 ? '男' : '女'
    }
    },
    {
    title: '状态',
    dataIndex: 'state',
    key: 'state',
    width: 80,
    render(state){
    let config = {
    '1': '咸鱼一条',
    '2': '人民公仆',
    '3': '医院护士',
    '4': '科技公司FE',
    '5': '创业者'
    }
    return config[state]
    }
    },
    {
    title: '爱好',
    dataIndex: 'interest',
    key: 'interest',
    width: 80,
    render(abc){
    let config = {
    '1': '游泳',
    '2': '打篮球',
    '3': '踢足球',
    '4': '跑步',
    '5': '爬山',
    '6': '骑行',
    '7': '桌球',
    '8': '麦霸'
    }
    return config[abc]
    }
    },
    {
    title: '生日',
    dataIndex: 'birthday',
    key: 'birthday',
    width: 120,
    },
    {
    title: '地址',
    dataIndex: 'address',
    key: 'address',
    width: 120,
    },
    {
    title: '早起时间',
    dataIndex: 'time',
    key: 'time',
    width: 80
    }
    ]
    const columns2 = [
    {
    title: 'id', //表头标题
    key: 'id',
    width: 80,
    fixed: 'left',
    dataIndex: 'id' //数据源
    },
    {
    title: '用户名',
    key: 'userName',
    width: 80,
    fixed: 'left',
    dataIndex: 'userName'
    },
    {
    title: '性别',
    dataIndex: 'sex',
    key: 'sex',
    width: 80,
    render(sex){
    return sex === 1 ? '男' : '女'
    }
    },
    {
    title: '状态',
    dataIndex: 'state',
    key: 'state',
    width: 80,
    render(state){
    let config = {
    '1': '咸鱼一条',
    '2': '人民公仆',
    '3': '医院护士',
    '4': '科技公司FE',
    '5': '创业者'
    }
    return config[state]
    }
    },
    {
    title: '爱好',
    dataIndex: 'interest',
    key: 'interest',
    width: 80,
    render(abc){
    let config = {
    '1': '游泳',
    '2': '打篮球',
    '3': '踢足球',
    '4': '跑步',
    '5': '爬山',
    '6': '骑行',
    '7': '桌球',
    '8': '麦霸'
    }
    return config[abc]
    }
    },
    {
    title: '生日',
    dataIndex: 'birthday',
    key: 'birthday',
    width: 120,
    },
    {
    title: '地址',
    dataIndex: 'address',
    key: 'address',
    width: 120,
    },
    {
    title: '早起时间',
    dataIndex: 'time',
    key: 'time',
    width: 120
    }, {
    title: '生日',
    dataIndex: 'birthday',
    key: 'birthday2',
    width: 120,
    },
    {
    title: '地址',
    dataIndex: 'address',
    key: 'address2',
    width: 120,
    },
    {
    title: '早起时间',
    dataIndex: 'time',
    key: 'time2',
    width: 120
    }
    ]
    const columns3 = [
    {
    title: 'id', //表头标题
    key: 'id',
    dataIndex: 'id' //数据源
    },
    {
    title: '用户名',
    key: 'userName',
    dataIndex: 'userName'
    },
    {
    title: '性别',
    dataIndex: 'sex',
    key: 'sex',
    render(sex){
    return sex === 1 ? '男' : '女'
    }
    },
    {
    title: '年龄',
    dataIndex: 'age',
    key: 'age',
    sorter: (a, b) => {
    return a.age - b.age;
    },
    sortOrder: this.state.sortOrder
    },
    {
    title: '状态',
    dataIndex: 'state',
    key: 'state',
    render(state){
    let config = {
    '1': '咸鱼一条',
    '2': '人民公仆',
    '3': '医院护士',
    '4': '科技公司FE',
    '5': '创业者'
    }
    return config[state]
    }
    },
    {
    title: '爱好',
    dataIndex: 'interest',
    key: 'interest',
    render(abc){
    let config = {
    '1': '游泳',
    '2': '打篮球',
    '3': '踢足球',
    '4': '跑步',
    '5': '爬山',
    '6': '骑行',
    '7': '桌球',
    '8': '麦霸'
    }
    return config[abc]
    }
    },
    {
    title: '生日',
    dataIndex: 'birthday',
    key: 'birthday',
    },
    {
    title: '地址',
    dataIndex: 'address',
    key: 'address',
    },
    {
    title: '早起时间',
    dataIndex: 'time',
    key: 'time'
    }
    ]
    const columns4 = [
    {
    title: 'id', //表头标题
    key: 'id',
    dataIndex: 'id' //数据源
    },
    {
    title: '用户名',
    key: 'userName',
    dataIndex: 'userName'
    },
    {
    title: '性别',
    dataIndex: 'sex',
    key: 'sex',
    render(sex){
    return sex === 1 ? '男' : '女'
    }
    },
    {
    title: '年龄',
    dataIndex: 'age',
    key: 'age'
    },
    {
    title: '状态',
    dataIndex: 'state',
    key: 'state',
    render(state){
    let config = {
    '1': <Badge status="success" text="成功" />,
    '2': <Badge status="error" text="报错" />,
    '3': <Badge status="default" text="正常" />,
    '4': <Badge status="processing" text="进行中" />,
    '5': <Badge status="warning" text="警告" />,
    }
    return config[state]
    }
    },
    {
    title: '爱好',
    dataIndex: 'interest',
    key: 'interest',
    render(abc){
    let config = {
    '1': '游泳',
    '2': '打篮球',
    '3': '踢足球',
    '4': '跑步',
    '5': '爬山',
    '6': '骑行',
    '7': '桌球',
    '8': '麦霸'
    }
    return config[abc]
    }
    },
    {
    title: '生日',
    dataIndex: 'birthday',
    key: 'birthday',
    },
    {
    title: '地址',
    dataIndex: 'address',
    key: 'address',
    },
    {
    title: '操作',
    render: (text, item) => {
    //注意 this 为 render 方法内部的this
    return <Button size="small" onClick={(item) => {this.handleDelete(item)}}>删除</Button>
    }
    }
    ] return (
    <div>
    <Card title="头部固定">
    <Table
    bordered
    columns={columns}
    dataSource={this.state.dataSource}
    pagination={false}
    scroll={{y: 240}}
    />
    </Card>
    <Card title="左侧固定" style={{margin: '10px 0'}}>
    <Table
    bordered
    columns={columns2}
    dataSource={this.state.dataSource}
    pagination={false}
    scroll={{x: 1130}}
    />
    </Card>
    <Card title="表格排序" style={{margin: '10px 0'}}>
    <Table
    bordered
    columns={columns3}
    dataSource={this.state.dataSource}
    pagination={false}
    onChange={this.handleChange}
    />
    </Card>
    <Card title="操作按钮" style={{margin: '10px 0'}}>
    <Table
    bordered
    columns={columns4}
    dataSource={this.state.dataSource}
    pagination={false}
    />
    </Card>
    </div>
    )
    }
    }

注:项目来自慕课网

【共享单车】—— React后台管理系统开发手记:AntD Table高级表格的更多相关文章

  1. 【共享单车】—— React后台管理系统开发手记:主页面架构设计

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  2. 【共享单车】—— React后台管理系统开发手记:城市管理和订单管理

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  3. 【共享单车】—— React后台管理系统开发手记:UI菜单各个组件使用(Andt UI组件)

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  4. 【共享单车】—— React后台管理系统开发手记:AntD Form基础组件

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  5. 【共享单车】—— React后台管理系统开发手记:AntD Table基础表格

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  6. 【共享单车】—— React后台管理系统开发手记:Redux集成开发

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  7. 【共享单车】—— React后台管理系统开发手记:Router 4.0路由实战演练

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  8. 【共享单车】—— React后台管理系统开发手记:权限设置和菜单调整(未完)

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  9. 【共享单车】—— React后台管理系统开发手记:员工管理之增删改查

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

随机推荐

  1. 怎样把本地的jar包引入到maven工程里面

    有些jar包在maven库里面查找不到,但是maven项目又有用到,此时最简单的方法就是把该jar包放到工程底下某个目录,然后在pom.xml里面配置dependency引入它. 具体如何操作呢? 假 ...

  2. Tomcat学习笔记(六)

    Tomcat日志 网上找到一篇分析不错的博文   http://peiquan.blog.51cto.com/7518552/1580189/

  3. 《R语言实战》读书笔记--第四章 基本数据管理

    本章内容: 操纵日期和缺失值 熟悉数据类型的转换 变量的创建和重编码 数据集的排序,合并与取子集 选入和丢弃变量 多说一句,数据预处理的时间是最长的……确实是这样的,额. 4.1一个示例 4.2创建新 ...

  4. 3.1 Java以及Lucene的安装与配置

    Lucene是Java开发的一套用于全文检索和搜索的开源程序库,它面向对象多层封装,提供了一个低耦合.与平台无关的.可进行二次开发的全文检索引擎架构,是这几年最受欢迎的信息检索程序库[1].对Luce ...

  5. uva1214 Manhattan Wiring 插头DP

    There is a rectangular area containing n × m cells. Two cells are marked with “2”, and another two w ...

  6. Git的优点

    没有网络时也可以使用版本控制系统,这点svn做不到,如果你一直有网络,这个可以忽略: git由于所有版本都在本地的.git目录数据库中,因此它可以用指针随时改变指向,指向不同的版本,把它作为最新的he ...

  7. 内核中的内存申请:kmalloc、vmalloc、kzalloc、kcalloc、get_free_pages【转】

    转自:http://www.cnblogs.com/yfz0/p/5829443.html 在内核模块中申请分配内存需要使用内核中的专用API:kmalloc.vmalloc.kzalloc.kcal ...

  8. C程序编译过程浅析【转】

    转自:http://blog.csdn.net/koudaidai/article/details/8092647 前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接” ...

  9. Linux内核情景分析的alloc_pages

    NUMA结构的alloc_pages ==================== mm/numa.c 43 43 ==================== 43 #ifdef CONFIG_DISCON ...

  10. (10)ubuntu内核源码树

    ubuntu内核源码树目录: root@ubuntu:/lib/modules/3.13.0-32-generic/build#