SuperAPI AI 工具集

row-pinning

通用与其它

查看项目

更新于 10-16 04:01

技能介绍

用途

row-pinning 行固定技能建立在 core 与 table-features 之上,用于把带有稳定 ID 的行固定到顶部、中部和底部三个行区域(row regions)中。固定操作会划分出行区域,但具体的渲染顺序与粘性(sticky)布局由渲染器自行控制。

主要能力

  • 通过 rowPinningFeature 启用行固定功能,配合 tableFeatures 组合使用。
  • 提供顶部、中部、底部三个区域的行获取接口:table.getTopRows()、table.getCenterRows()、table.getBottomRows()。
  • 通过 keepPinnedRows 选项决定固定行在筛选和分页影响下的可见性策略。

使用方式

设置阶段,需要引入 rowPinningFeature 与 tableFeatures:

import { rowPinningFeature, tableFeatures } from '@tanstack/table-core'

type Person = { id: string; name: string }
export const features = tableFeatures({ rowPinningFeature })
export const options = {
  getRowId: (row: Person) => row.id,
  keepPinnedRows: true,
}

渲染阶段,按区域分别获取并渲染行:

const regions = [
  table.getTopRows(),
  table.getCenterRows(),
  table.getBottomRows(),
]
for (const rows of regions) rows.forEach(renderRow)

如果视觉顺序重要,应显式渲染每个区域。

常见错误

错误一:持久化基于索引的 ID

错误写法:

const options = { getRowId: (_row: Person, index: number) => String(index) }

正确写法:

const options = { getRowId: (row: Person) => row.id }

原因:索引在排序、筛选、分页和插入操作下都会发生变化。

错误二:期望固定行自动获得粘性定位

错误写法:

row.pin('top')

正确写法:

topRowElement.style.position = 'sticky'

原因:固定状态本身不会设置样式或放置 DOM 元素。

固定行可见性策略

  • keepPinnedRows: true 为默认值。固定行即使在筛选或分页中被移除出中心行模型,仍会保留在其固定区域中可见。
  • keepPinnedRows: false 则只保留当前已筛选和分页后的行模型中存在的固定行。

应根据产品行为显式选择,两种取值本身都不算错误。

API 探索

可以查看 node_modules/@tanstack/table-core/dist/features/row-pinning/ 目录,了解区域获取接口、行 API 以及 keepPinnedRows 的语义。

适用场景与限制

该技能适用于需要在表格中固定特定行、并配合筛选与分页控制可见性的场景。渲染顺序与粘性布局需由使用方自行实现,固定状态不负责样式与 DOM 位置;行 ID 必须稳定,不能使用索引。其余关于价格、平台或效果的信息暂未提供。