该技能基于 @tanstack/table-core 与入门内容,用于在 TanStack Ember Table v9 中管理表格状态。除非应用其他部分需要读取、持久化、校验或驱动某个状态切片,否则应保持状态内部化。
状态面:table.baseAtoms 是表格内部可写原子;table.atoms 是各已注册切片的只读、带归属的原子;table.store.state 暴露当前扁平状态。优先使用 setSorting、setPageSize、row.toggleSelected() 等功能方法写入。Ember 响应式特性把这些读取桥接到 Glimmer 跟踪,没有 table.Subscribe,useTable 也没有选择器参数,渲染时无需订阅;应在模板消费的 getter 中读取相关 API。table.store.subscribe 不是 Ember 渲染机制,适配器的 store 是拉取式的。features 与 atoms 是构造时输入,需在 useTable 前创建一次。
每个切片只选一个归属:默认内部 baseAtoms;initialState 提供内部起始值;atoms 中的外部可写原子;或 state 中的 @tracked 值配合 on[State]Change。读取优先级为 atoms 高于 state 高于内部 baseAtoms,不要配置多个归属作为回退。
无 initialState、atoms、state 或回调时,Table 内部拥有状态。initialState 仅用于起始/重置值,之后修改不会重置现有状态,应使用 resetPagination() 等功能重置方法。外部 Ember 原子使用适配器再导出的 createAtom,其读取是 Glimmer 响应式的;功能 API 会写入外部原子,此时不要再为同一原子切片添加 onPaginationChange。受控 tracked 状态使用 state 加匹配回调,需处理原始值与更新函数;V9 没有全局 onStateChange。
低层写入优先用功能方法,内部状态确需低层更新时用 table.baseAtoms.pagination.set(...),不要写只读的 table.atoms.pagination。类型可用 TableState<typeof features> 及 PaginationState、SortingState 等。常见错误包括:受控切片未把回调写回、期望快照读取或订阅组件、混用原子与 state 归属、就地修改受控对象、为外部归属写内部 baseAtom。API 可查阅 node_modules/@tanstack/ember-table/declarations 下的 use-table.d.ts、signal.d.ts、reactivity.d.ts,以及 table-core 对应 feature 目录。