前言:以下内容基于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. 使用PowerShell登陆多台Windows,测试DCAgent方法

    目标: 需要1台PC用域账户远程登陆10台PC,每台登陆后的PC执行发送敏感数据的操作后,再logoff. 在DCAgent服务器上,查看这10个用户每次登陆时,DCAgent是否能获取到登陆信息(I ...

  2. 《c程序设计语言》-3.1 判断语句多少影响时间

    #include <stdio.h> #define Num 1000000 /* int binsearch(int x,int v[],int n) { int low,high,mi ...

  3. poj~3694Network

    Description A network administrator manages a large network. The network consists of N computers and ...

  4. 【Error】Python:UnicodeDecodeError: ‘XXX' codec can't decode bytes in position... 解决方法

    错误信息: UnicodeDecodeError: ‘XXX' codec can't decode bytes in position 2-5: illegal multibyte sequence ...

  5. github 小白教程

    工作整天在忙,也没好好有整块的时间去学学东西,记录一下github的学习过程,以便日后好回顾,我一直坚信只有被大家分享的知识,才是好知识. github是什么?一定有人会有这样的疑问.那么如果说到gi ...

  6. Android Handler使用

    1. 介绍 Handler允许向关联线程的消息队列(MessageQueue)发送消息(Message)和可执行对象(Runnable).每个Handler实例都与某个线程(即创建该Handler的线 ...

  7. Android NDK使用

    1. 介绍 这里主要想记录一下Android NDK开发C程序的使用方法 2. ndk下载 到google官网或者国内镜像网站下载android-ndk形如:  android-ndk-r<ve ...

  8. Linux操作系统的权限代码分析【转】

    转自:http://blog.csdn.net/lixuyuan/article/details/6217502 现在关于内核的书很少涉及到Linux内核的安全,内核安全大概包括了密码学实现(cryp ...

  9. windows安装scrapy

    1.安装Twisted 直接pip install Twisted 然后报错 error: Microsoft Visual C++ 14.0 is required. Get it with &qu ...

  10. PHP获取IP的方法

    function getIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARD ...