From 46921d567ef40fb4271621c817ddce11163c8581 Mon Sep 17 00:00:00 2001 From: riccardoperra Date: Mon, 27 Jul 2026 20:04:57 +0200 Subject: [PATCH 1/2] fix: react adapter sync state --- .../react/basic-external-atoms/src/main.tsx | 18 +- .../tests/e2e/smoke.spec.ts | 27 + .../tests/e2e/smoke.spec.ts | 37 + packages/react-table/package.json | 4 +- packages/react-table/src/reactivity.ts | 116 ++- packages/react-table/src/useTable.ts | 57 +- packages/react-table/tests/test-setup.ts | 3 + packages/react-table/tests/useTable.test.tsx | 930 ++++++++++++++++++ packages/react-table/vite.config.ts | 1 + .../src/core/table/constructTable.ts | 30 +- .../src/core/table/coreTablesFeature.utils.ts | 41 +- .../tests/unit/core/tableAtoms.test.ts | 38 + pnpm-lock.yaml | 6 + 13 files changed, 1268 insertions(+), 40 deletions(-) create mode 100644 packages/react-table/tests/test-setup.ts create mode 100644 packages/react-table/tests/useTable.test.tsx diff --git a/examples/react/basic-external-atoms/src/main.tsx b/examples/react/basic-external-atoms/src/main.tsx index 6a1dd8a7c8..546512e67e 100644 --- a/examples/react/basic-external-atoms/src/main.tsx +++ b/examples/react/basic-external-atoms/src/main.tsx @@ -2,7 +2,7 @@ import React from 'react' import { TanStackDevtools } from '@tanstack/react-devtools' import ReactDOM from 'react-dom/client' import './index.css' -import { useCreateAtom, useSelector } from '@tanstack/react-store' +import { useCreateAtom } from '@tanstack/react-store' import { createColumnHelper, createPaginatedRowModel, @@ -79,14 +79,8 @@ function App() { pageSize: 10, }) - // Subscribe to each atom independently — fine-grained reactivity. - const sorting = useSelector(sortingAtom) - const pagination = useSelector(paginationAtom) - - console.log('sorting', sorting) - console.log('pagination', pagination) - - // Create the table and pass your per-slice external atoms. + // Pass the per-slice external atoms directly. The React adapter subscribes + // through table.store, so no separate useSelector call is needed here. const table = useTable( { key: 'basic-external-atoms', // needed for devtools @@ -185,7 +179,7 @@ function App() {
Page
- {(table.atoms.pagination.get().pageIndex + 1).toLocaleString()} of{' '} + {(table.state.pagination.pageIndex + 1).toLocaleString()} of{' '} {table.getPageCount().toLocaleString()}
@@ -195,7 +189,7 @@ function App() { type="number" min="1" max={table.getPageCount()} - defaultValue={table.atoms.pagination.get().pageIndex + 1} + defaultValue={table.state.pagination.pageIndex + 1} onChange={(e) => { const page = e.target.value ? Number(e.target.value) - 1 : 0 table.setPageIndex(page) @@ -204,7 +198,7 @@ function App() { />