用react-custom-scrollbars插件美化 Ant Design Table 滚动条

Ant Design Table 自带的滚动条不太美观,我们来用react-custom-scrollbars插件给它美化一下。

先看一下最终的效果,增加一下信心:

在这里插入图片描述

安装 react-custom-scrollbars

不多说了,直接安装插件

npm install react-custom-scrollbars --save

引入滚动条插件和表格组件,写个DataTable组件

注意:

当表格重新渲染的时候,滚动条会重新滚动到顶部,之前滚动的位置会消失。所以我们需要在滚动条停止的时候记下它的位置,当下次更新时,重新定位滚动条的位置。

import React from 'react';
import { Table } from 'antd';
import { Scrollbars } from 'react-custom-scrollbars';

// 数据表头
const columns = [
    {
        title: '姓名',
        dataIndex: 'name',
        key: 'name',
    },
    {
        title: '年龄',
        dataIndex: 'age',
        key: 'age',
    },
    {
        title: '住址',
        dataIndex: 'address',
        key: 'address',
    },
    // 增加空白列
    {}
];

// 滚动条参数
const scroll = {
   // 如果最终结果表格内容与表格头部无法对齐。
   // 表格头需要增加空白列,弹性布局
    width: '100%',
    // 最大高度,内容超出该高度会出现滚动条
    height: 100,
}

class DataTable extends React.Component{
   // 滚动结束,记下滚动位置
   handleScrollStop = () => {
        if (this.scrollbarsRef.current){
            this.scrollTop = this.scrollbarsRef.current.getScrollTop();
        }
    };
    
    componentDidMount() {
        //  覆盖ant design 自带滚动条样式
        document.querySelector('.ant-table-scroll > .ant-table-body').style.overflow='hidden';
        // 滚动条组件ref,重新设置滚动位置
        this.scrollbarsRef = React.createRef();
    }
    
    // 组件重新渲染,重新设置滚动条的位置
	componentDidUpdate(prevProps, prevState, snapshot) {
        if (this.scrollbarsRef.current){
            this.scrollbarsRef.current.scrollTop(this.scrollTop);
        }
    }
    
    render() {
        const dataSource = [
            {
                key: '1',
                name: '胡彦斌',
                age: 32,
                address: '西湖区湖底公园1号',
            },
            {
                key: '2',
                name: '胡彦祖',
                age: 42,
                address: '西湖区湖底公园1号',
            },
        ];
		
		// 词法作用域
		const self = this;
		
		// 用react-custom-scrollbars包裹住表格内容
        const components = {
            table (props) {
                const { className } = props;
                return (
                    <Scrollbars 
                        style={scroll}
                        onScrollStop={self.handleScrollStop}
                        ref={ self.scrollbarsRef } >
                        <table className={className}>
                        { props.children }
                        </table>
                    </Scrollbars>
                )
            }
        };

        return (
            <Table
                dataSource={dataSource}
                columns={columns}
                // 此scroll选项必须开启,宽高与react-custom-scrollbars插件一致
                scroll={{y: scroll.height, x: scroll.width}}
                // 将react-custom-scrollbars组件插入到表格中
                components={components}
            />
        )
    }
}

export default DataTable;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
React Custom Scrollbars是一个npm包,它提供了一个自定义的滚动条组件,可以替代浏览器原始的滚动条。你可以在npm上找到它的地址:https://www.npmjs.com/package/react-custom-scrollbars。如果你在中国,也可以使用cnpm镜像地址:https://cnpmjs.org/package/react-custom-scrollbars。在GitHub上,你可以找到关于React Custom Scrollbars的高级用法:https://github.com/malte-wessel/react-custom-scrollbars/tree/master/docs,并且还有API文档:https://github.com/malte-wessel/react-custom-scrollbars/blob/master/docs/API.md。使用React Custom Scrollbars的基本用法是将需要使用滚动条的内容包裹在<Scrollbars>标签中。你可以在代码中导入Scrollbars组件,并在render方法中使用它,设置宽度和高度等样式属性。例如: ```javascript import { Scrollbars } from 'react-custom-scrollbars'; class App extends Component { render() { return ( <Scrollbars style={{ width: 500, height: 300 }}> <p>Some great content...</p> </Scrollbars> ); } } ``` 希望这些信息对你有帮助! #### 引用[.reference_title] - *1* *2* [滚动条组件,react-custom-scrollbars](https://blog.csdn.net/AS_TS/article/details/107027203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [react-custom-scrollbars 滚动条组件的简单实现](https://blog.csdn.net/qq_42775791/article/details/120498076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值