用途
当 TanStack Table v9 的内置选项和类型化的 tableMeta/columnMeta 不足以满足需求时,使用自定义插件来添加可复用的状态或行为,从而增强 Table 对象。如果只是传递回调或渲染数据,应优先使用 meta,而不是编写插件。
主要能力
插件机制可以声明状态、选项、对象方法,并通过运行时生命周期钩子安装这些能力。文档列出了 10 个公开 FeatureMaps、API 赋值辅助函数、生命周期顺序以及高级 row-model 映射。插件通过 tableFeatures({ customFeature }) 注册,使类型推断与组合能够包含它。
使用方式
- 先阅读核心与功能架构,理解插件定位。
- 确定该行为所拥有的状态、选项和对象方法;若只涉及回调或渲染数据,改用作用域 meta 类型。
- 在声明插件类型或编写生命周期钩子前,阅读完整的插件示例,其中列举了全部 10 个公开 FeatureMaps、API 赋值辅助函数、生命周期顺序以及高级 row-model 映射。
- 在 Plugins 中声明 feature key。只合并具有匹配运行时实现的 FeatureMaps;仅有声明不会安装任何行为。
- 在 getInitialState 中于默认值之后保留用户状态;在默认选项中连接状态更新器。使用 assignTableAPIs 安装表格方法,使用 assignPrototypeAPIs 在对应生命周期钩子内安装对象方法。
- 保持 feature 对象和 tableFeatures({ customFeature }) 的结果稳定。通过 tableFeatures 注册插件,以便类型推断和组合包含它。
- 在构造出的表格上验证所声明的状态、选项、方法和重置行为。每个声明的 API 必须在运行时存在;重置行为必须尊重状态的所有者。
生命周期边界
- initTableInstanceData 用于由单个表拥有的可变数据,resetTableInstanceData 用于清除其瞬态内容。
- 所有功能初始化都在任何 constructTableAPIs 钩子之前完成。
- 方法安装与数据分配保持分离。
- 原型方法在表格的行、列、单元格或表头之间共享。通过方法的当前实例读取每个对象的值,并使用受支持的实例数据钩子处理可变字段。
- 在添加记忆化方法或高级 row-model/缓存接线之前,阅读示例中的安装规则。
常见失败
- 类型没有匹配的运行时钩子,会声明出运行时不存在的 API。
- 对已构造实例进行临时性修改,会绕过插件注册和推断组合。
- 将密度示例视为唯一的扩展模式,会遗漏列定义和其他公开 FeatureMaps。应根据行为选择所需的映射;高级 row-model 声明还需要运行时 pipeline/缓存接线。
已安装 API 的发现方式
可检查以下文件:
- node_modules/@tanstack/table-core/dist/types/TableFeatures.d.ts
- dist/types/ 中导出的 *_FeatureMap 接口
- dist/utils.d.ts 中的 assignTableAPIs/assignPrototypeAPIs
- dist/features/ 下的声明,参考同类内置生命周期签名
适用场景与限制
适用于需要为表格增加可复用能力、可复用状态或跨行列单元格共享方法的场景。不适用于仅需回调或渲染数据的情形,此时应使用 meta。当前资料未提供具体的收费、价格、平台支持或效果数据。