React使用antd里面的Table组件,表格可自由控制列宽

import React, {Component} from 'react'
import {Resizable} from 'react-resizable';
import 'react-resizable/css/styles.css' //要引入样式
import {Table} from 'antd';
import '../../assets/style/updateCart.css'


const ResizableTitle = props => {
    const {onResize, width, ...restProps} = props;

    if (!width) {
        return <th {...restProps} />;
    }

    return (
        <Resizable
            width={width}
            height={0}
            handle={
                <span
                    className="react-resizable-handle"
                    onClick={e => {
                        e.stopPropagation();
                    }}
                />
            }
            onResize={onResize}
            draggableOpts={{enableUserSelectHack: false}}
        >
            <th {...restProps} />
        </Resizable>
    );
};
export default class UpdateCart extends Component {
    state = {
        columns: [
            {
                title: 'Date',
                dataIndex: 'date',
                width: 200,
            },
            {
                title: 'Amount',
                dataIndex: 'amount',
                width: 100,
                sorter: (a, b) => a.amount - b.amount,
            },
            {
                title: 'Type',
                dataIndex: 'type',
                width: 100,
            },
            {
                title: 'Note',
                dataIndex: 'note',
                width: 100,
            },
            {
                title: 'Action',
                key: 'action',
                render: () => <a>Delete</a>,
            },
        ],
    };

    components = {
        header: {
            cell: ResizableTitle,
        },
    };

    data = [
        {
            key: 0,
            date: '2018-02-11',
            amount: 120,
            type: 'income',
            note: 'transfer',
        },
        {
            key: 1,
            date: '2018-03-11',
            amount: 243,
            type: 'income',
            note: 'transfer',
        },
        {
            key: 2,
            date: '2018-04-11',
            amount: 98,
            type: 'income',
            note: 'transfer',
        },
    ];

    handleResize = index => (e, {size}) => {
        this.setState(({columns}) => {
            const nextColumns = [...columns];
            nextColumns[index] = {
                ...nextColumns[index],
                width: size.width,
            };
            return {columns: nextColumns};
        });
    };

    render() {
        const columns = this.state.columns.map((col, index) => ({
            ...col,
            onHeaderCell: column => ({
                width: column.width,
                onResize: this.handleResize(index),
            }),
        }));
        return (
            <div>
                <Table bordered components={this.components} columns={columns} dataSource={this.data}/>
                <button>按钮</button>
            </div>
        );
    }
}
#components-table-demo-resizable-column .react-resizable {
    position: relative;
    background-clip: padding-box;
}

#components-table-demo-resizable-column .react-resizable-handle {
    position: absolute;
    right: -5px;
    bottom: 0;
    z-index: 1;
    width: 10px;
    height: 100%;
    cursor: col-resize;
}

//控制表格icon的样式
.react-resizable-handle {
    top: 0;
    left: 99%;
    background-image: none;
    cursor: col-resize;
    height: 100%;
}

链接:表格 Table - Ant Design 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值