前言:以下内容基于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. 【CZY选讲·逆序对】

    题目描述 LYK最近在研究逆序对. 这个问题是这样的. 一开始LYK有一个2^n长度的数组ai. LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设 n=4,k= ...

  2. 《R语言实战》读书笔记--第三章 图形初阶(一)

    3.1使用图形 可以使用pdf等函数将图形直接保存在文件中.在运用attach和detach函数的使用中经常出现错误,比如命名重复的问题,所以,应该尽量避免使用这两个函数. plot是一般的画图函数, ...

  3. 【CF1016F】Road Projects(贪心)

    题意:给你一棵n 个节点的树,定义1到n的代价是1到 n节点间的最短路径的长度. 现在给你 m 组询问,让你添加一条边权为 w 的边(不与原图重复),求代价的最大值.询问之间相互独立. 1≤n,m≤3 ...

  4. 倒置函数reverse的用法

    倒置字符串函数reverse:用于倒置字符串s中的各个字符的位置,如原来字符串中如果初始值为123456,则通过reverse函数可将其倒置为654321,程序如下:#include<stdio ...

  5. 一种机制,与js类似

    我们知道,当两个条件进行逻辑与操作的时候,其中任何一个条件为假,则表达式的结果为假.所以,遇到(A 且 B)这种表达式,如果A为假的话,B是不是真假都无所谓了,当遇到一个假条件的时候,程序也就没有必要 ...

  6. 限制MYSQL从服务器为只读状态

    修改全局变量的方法有两种,第一种是修改配置文件,第二种是SQL语句设置全局变量的值.(可以参考:http://www.cnblogs.com/qlqwjy/p/8046592.html) 0.简介: ...

  7. SQL联合查询(内联、左联、右联、全联)语法

    SQL联合查询(内联.左联.右联.全联)语法 概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer join .右联right outer join  ...

  8. POCO C++ SOCKET

    // client program #include "Poco/Net/DatagramSocket.h" #include "Poco/Net/SocketAddre ...

  9. redis介绍与配置

    redis 是什么 我们都知道 mysql.oracle 是关系型数据库,它们的特点就是像一个 Excel 表格一样,而且都是用 SQL 语句.但是你可能看到一种东西叫NoSQL.NoSQL 泛指非关 ...

  10. Appium+python自动化9-SDK Manager【转载】

    前言 SDK Manager到有哪些东西是必须安装的呢? 一.SDK Manager 1.双击打开SDK Manager界面