想直接看实现?可以参考以下示例
TanStack Table 提供状态和 API,有助于在您的表格 UI 中实现列固定功能。您可以通过多种方式实现列固定。您可以将固定的列拆分到单独的表格中,或者将所有列保留在同一个表格中,但使用固定状态来正确排序列,并使用粘性 CSS 将列固定到左侧或右侧。
有 3 种表格功能可以重新排序列,它们的顺序如下:
更改固定列顺序的唯一方法是在 columnPinning.left 和 columnPinning.right 状态本身中。 columnOrder 状态只会影响未固定(“中间”)列的顺序。
管理 columnPinning 状态是可选的,通常不是必需的,除非您正在添加持久化状态功能。TanStack Table 已经为您跟踪了列固定状态。如果您需要,可以像管理任何其他表格状态一样管理 columnPinning 状态。
const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({
left: [],
right: [],
});
//...
const table = useReactTable({
//...
state: {
columnPinning,
//...
}
onColumnPinningChange: setColumnPinning,
//...
});
const [columnPinning, setColumnPinning] = useState<ColumnPinningState>({
left: [],
right: [],
});
//...
const table = useReactTable({
//...
state: {
columnPinning,
//...
}
onColumnPinningChange: setColumnPinning,
//...
});
一个非常常见的用例是默认固定一些列。您可以通过使用固定列 ID 初始化 columnPinning 状态,或者通过使用 initialState 表格选项来完成。
const table = useReactTable({
//...
initialState: {
columnPinning: {
left: ['expand-column'],
right: ['actions-column'],
},
//...
}
//...
});
const table = useReactTable({
//...
initialState: {
columnPinning: {
left: ['expand-column'],
right: ['actions-column'],
},
//...
}
//...
});
注意:其中一些 API 是 v8.12.0 中的新功能
有一些有用的列 API 方法可以帮助您实现列固定功能
如果您仅使用粘性 CSS 固定列,那么对于大多数情况,您可以照常渲染表格,并使用 table.getHeaderGroups 和 row.getVisibleCells 方法。
但是,如果您将固定的列拆分到单独的表格中,则可以使用 table.getLeftHeaderGroups、table.getCenterHeaderGroups、table.getRightHeaderGroups、row.getLeftVisibleCells、row.getCenterVisibleCells 和 row.getRightVisibleCells 方法来仅渲染与当前表格相关的列。
您的每周 JavaScript 资讯。每周一免费发送给超过 10 万开发者。