---
order: 27
title:
en-US: Resizable column
zh-CN: 可伸缩列
debug: true
---
## zh-CN
集成 [react-resizable ](https://github.com/STRML/react-resizable ) 来实现可伸缩列。如果有排序需要,可以通过[额外标记](https://codesandbox.io/s/zrj8xvyzxx)阻止触发排序。
## en-US
Implement resizable column by integrate with [react-resizable ](https://github.com/STRML/react-resizable ). When sort needed, you can use [additional mark ](https://codesandbox.io/s/zrj8xvyzxx ) to prevent resize trigger sort.
```tsx
import { Table } from 'antd';
import type { ColumnsType, ColumnType } from 'antd/lib/table';
import React, { useState } from 'react';
import type { ResizeCallbackData } from 'react-resizable';
import { Resizable } from 'react-resizable';
interface DataType {
key: React.Key;
date: string;
amount: number;
type: string;
note: string;
}
const ResizableTitle = (
props: React.HTMLAttributes< any > & {
onResize: (e: React.SyntheticEvent< Element > , data: ResizeCallbackData) => void;
width: number;
},
) => {
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 >
);
};
const App: React.FC = () => {
const [columns, setColumns] = useState< ColumnsType < DataType > >([
{
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 > ,
},
]);
const data: DataType[] = [
{
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',
},
];
const handleResize =
(index: number) =>
(_: React.SyntheticEvent< Element > , { size }: ResizeCallbackData) => {
const newColumns = [...columns];
newColumns[index] = {
...newColumns[index],
width: size.width,
};
setColumns(newColumns);
};
const mergeColumns: ColumnsType< DataType > = columns.map((col, index) => ({
...col,
onHeaderCell: column => ({
width: (column as ColumnType< DataType > ).width,
onResize: handleResize(index),
}),
}));
return (
< Table
bordered
components={{
header: {
cell: ResizableTitle,
},
}}
columns={mergeColumns}
dataSource={data}
/>
);
};
export default App;
```
```css
#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;
}
```