--- 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/es/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 & { onResize: (e: React.SyntheticEvent, data: ResizeCallbackData) => void; width: number; }, ) => { const { onResize, width, ...restProps } = props; if (!width) { return ; } return ( { e.stopPropagation(); }} /> } onResize={onResize} draggableOpts={{ enableUserSelectHack: false }} > ); }; const App: React.FC = () => { const [columns, setColumns] = useState>([ { 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: () => Delete, }, ]); 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: Function = (index: number) => (_: React.SyntheticEvent, { size }: ResizeCallbackData) => { const newColumns = [...columns]; newColumns[index] = { ...newColumns[index], width: size.width, }; setColumns(newColumns); }; const mergeColumns: ColumnsType = columns.map((col, index) => ({ ...col, onHeaderCell: column => ({ width: (column as ColumnType).width, onResize: handleResize(index), }), })); return ( ); }; 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; } ```