使用 react-antd-column-resize 实现 Ant Design 表格列宽拖动

3,091 阅读3分钟

在前端开发中,Ant Design 是一套非常流行的 React UI 组件库,而表格是我们经常在项目中使用的重要组件之一。然而,Ant Design 的表格默认情况下不支持列宽的拖动调整,这在处理复杂数据展示时可能会带来一些困扰。好在有 react-antd-column-resize 这个组件,它基于 React Hooks 开发,提供了一种方便快捷的解决方案,可以实现 Ant Design 表格的列宽拖动功能。

在项目开发过程中,经常遇到需要调整表格列宽的情况。比如,我们希望某一列显示更多的内容,或者将多个列调整为相同的宽度,以便更好地展示数据。但是,Ant Design 表格并没有原生支持列宽的拖动调整功能。

为了解决这个问题,我发现了一个非常实用的组件,名为 react-antd-column-resize。这个组件基于 React Hooks 开发,专门用于实现 Ant Design 表格的列宽拖动功能。它不仅支持 Ant Design 4 和 Ant Design 5,还可以与 ant-design/pro-components 以及其他基于 Ant Design 开发的表格组件一起使用。

使用 react-antd-column-resize 非常简单。首先,我们需要安装该组件:

npm install --save react-antd-column-resize

# 或使用 yarn

yarn add react-antd-column-resize

安装完成后,我们可以按照以下步骤使用 react-antd-column-resize:

  1. 导入所需的组件和 hooks:
import { Button, Divider, Table } from 'antd';
import React from 'react';
import { useAntdColumnResize } from 'react-antd-column-resize';
  1. 定义表格的列配置和数据源:
const columns = [
  {
    title: 'Name',
    dataIndex: 'name',
    key: 'name',
    width: 200,
    align: 'center',
  },
  {
    title: 'Age',
    dataIndex: 'age',
    key: 'age',
    width: 100,
  },
  {
    title: 'Address',
    dataIndex: 'address',
    key: 'address',
    width: 300,
  },
  {
    title: 'Phone',
    dataIndex: 'phone',
    key: 'phone',
    fixed: 'right',
  },
];

const data = [
  {
    key: '1',
    name: 'John Doe',
    age: 32,
    address: '123 Street, City',
    phone: '1588553336',
  },
  {
    key: '2',
    name: 'Jane Smith',
    age: 28,
    address: '456 Road, Town',
    phone: '1588553336',
  },
];
  1. 使用 useAntdColumnResize hook 获取可拖动列配置及其他

相关信息:

const { resizableColumns, components, tableWidth, resetColumns } =
  useAntdColumnResize(() => {
    return { columns, minWidth: 100 };
  }, []);

在上述代码中,useAntdColumnResize 接受两个参数:setupdependenciessetup 是一个函数,用于获取列配置和拖动相关的参数,比如最小宽度等。在这个例子中,我们返回了包含列配置和最小宽度的对象。dependencies 是一个数组,用于更新依赖项。

  1. 在表格组件中使用获取到的相关信息:
return (
  <div className="app">
    <Button onClick={resetColumns}>重置Columns</Button>
    <Divider />
    <Table
      columns={resizableColumns}
      dataSource={data}
      components={components}
      bordered
      scroll={{ x: tableWidth }}
    />
  </div>
);

在上述代码中,我们使用 resizableColumns 替换原始的列配置,这样就可以实现列宽的拖动调整了。同时,我们还将 componentstableWidth 应用到表格组件中,以确保正确的显示和滚动效果。

总结: 通过使用 react-antd-column-resize 组件,我们可以轻松地实现 Ant Design 表格的列宽拖动功能。无论是在处理大量数据还是在布局要求较高的场景中,这个组件都能帮助我们更好地展示和操作表格数据。

希望这篇博客对你有所帮助!如果你对这个组件感兴趣,不妨去官方仓库给它一个 star,也欢迎贡献代码或提出改进建议。让我们一起推动这个组件的发展,为更多开发者提供便利!