【发布时间】:2020-07-03 04:33:56
【问题描述】:
我正在实现antd<Table> 组件,需要使用react-resizable 调整列的大小。
我按照documentation 中的示例进行操作,但是由于我的项目使用 TypeScript 并使用功能组件,因此我不得不对其进行重构,并且遇到了打字问题。
当我尝试从示例中实现 onHeaderCell 时:
const initialColumns: ColumnProps<Row>[] = myData.columns.map((column, index) => {
return {
...
onHeaderCell: (c: ColumnType<Row>) => ({
width: c.width,
onResize: handleResize(index),
}),
...
})
我收到此错误:
... 'onHeaderCell(...)' 返回的类型在这些类型之间不兼容。 输入'{宽度:字符串|号码 |不明确的; onResize: (e: SyntheticEvent
, resizeData: ResizeCallbackData) => void; }' 与类型 'HTMLAttributes' 没有共同的属性。
我的handleResize 看起来像这样:
const handleResize = (index: number) => (e: React.SyntheticEvent<Element, Event>, resizeData: ResizeCallbackData) => {
const { size } = resizeData
updateColumns((cols) => {
const nextColumns = [...cols]
nextColumns[index] = {
...nextColumns[index],
width: size.width,
}
return nextColumns
})
}
我已将ResizableTitle 移动到单独的组件中,<Table /> 以这种方式实现
const components = {
header: {
cell: ResizableTitle,
},
}
return (
<Table
bordered
components={components}
columns={columns} // columns come from the useState<ColumnProps<Row>[]>()
...
/>
)
如何更改此设置以获得所需的结果?
【问题讨论】:
-
您找到解决方案了吗?我也遇到了同样的问题...
-
@clint_milner 是的,我找到了解决方案。我摆脱了
react-resizable(它开始工作但只调整了1px的大小)并转移到自定义事件侦听器,它的行为与Resizable非常相似,但工作正常。 -
@clint_milner 如果您需要,我可以发布我的部分代码(不带
react-resizable)作为该问题的答案 -
那太好了——谢谢
-
@clint_milner 没问题,检查一下
标签: reactjs typescript antd