想要直接查看实现方式?请参考以下示例:
TanStack Table 提供了有助于在表格 UI 中实现列固定功能的状态和 API。您可以通过多种方式实现列固定:既可以将固定列拆分为独立的表格,也可以将所有列保留在同一表格中,但通过固定状态正确排序列,并使用粘性 CSS 将列固定在左侧或右侧。
有 3 种表格功能会重新排序列,其执行顺序如下:
改变固定列顺序的唯一方式是直接修改 columnPinning.left 和 columnPinning.right 状态本身。columnOrder 状态仅影响未固定("中间")列的排序。
管理 columnPinning 状态是可选的,通常在添加持久状态功能时才需要。TanStack Table 会为您自动跟踪列固定状态。如需管理,可像处理其他表格状态一样操作:
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,
//...
});
一个常见需求是默认固定某些列。可以通过初始化 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 方法,仅渲染当前表格相关的列。
Your weekly dose of JavaScript news. Delivered every Monday to over 100,000 devs, for free.