| name | create-table-hook |
| description | Create reusable Solid table infrastructure with createTableHook, createAppTable, createAppColumnHelper, shared features/defaults, component registries, App wrappers, and typed context hooks. Load for recurring app conventions, reactive per-table getters, or prop drilling.
|
| metadata | {"type":"framework","library":"@tanstack/solid-table","library_version":"9.2.4","framework":"solid"} |
| requires | ["@tanstack/table-core#core","getting-started","table-state"] |
| sources | ["TanStack/table:docs/framework/solid/guide/composable-tables.md","TanStack/table:examples/solid/composable-tables","TanStack/table:packages/solid-table/src/createTableHook.tsx"] |
This skill builds on @tanstack/table-core#core, getting-started, and table-state. Use a factory when tables share policy; keep one-off tables on createTable.
Setup
import {
createTableHook,
rowSelectionFeature,
tableFeatures,
} from '@tanstack/solid-table'
export const { createAppColumnHelper, createAppTable, useTableContext } =
createTableHook({
features: tableFeatures({ rowSelectionFeature }),
getRowId: (row: { id: string }) => row.id,
})
Core Patterns
Infer columns with the bound helper
type Person = { id: string; name: string }
const helper = createAppColumnHelper<Person>()
const columns = helper.columns([helper.accessor('name', { header: 'Name' })])
Preserve per-table reactivity
const table = createAppTable({
columns,
get data() {
return data()
},
})
return <table.AppTable>{() => <RowCount />}</table.AppTable>
Common Mistakes
MEDIUM Abstracting a one-off table
Wrong:
const app = createTableHook({ features: tableFeatures({}) })
Correct:
const table = createTable({ features, columns, data })
The factory should encode repeated app conventions rather than add ceremony.
Source: docs/framework/solid/guide/composable-tables.md
HIGH Passing per-table snapshots
Wrong:
createAppTable({ columns, data: data() })
Correct:
createAppTable({
columns,
get data() {
return data()
},
})
The getter preserves Solid tracking when the signal changes.
Source: examples/solid/composable-tables
HIGH Reading context outside wrappers
Wrong:
return <RowCount />
Correct:
return <table.AppTable>{() => <RowCount />}</table.AppTable>
Returned context hooks must run under the matching factory wrapper; use them instead of prop drilling registered components.
Source: packages/solid-table/src/createTableHook.tsx
API Discovery
Inspect node_modules/@tanstack/solid-table/dist/createTableHook.d.ts for exact returned names, component binding, context providers, and reactive option merging.