Svelte TanStack Table分页问题:onPaginationChange返回safeUpdater而非PaginationState
解决Svelte表格分页pageIndex跟踪问题
你遇到的问题是因为onPaginationChange的设计本身就不是用来返回新状态的——它接收的safeUpdater是用来安全更新分页状态的函数,而非状态值本身。要跟踪最新的pageIndex,有几种更直接的方式:
1. 直接订阅表格实例的state(最推荐)
createSvelteTable返回的实例包含一个state可写存储,里面的pagination字段直接包含当前的分页状态。用Svelte的反应式声明就能自动跟踪变化:
<script> import { createSvelteTable } from '@svelteuidev/core'; import { data } from './your-data-source.js'; const table = createSvelteTable({ data, pagination: { pageIndex: 0, pageSize: 10 } }); // 自动跟踪最新pageIndex $: currentPage = table.state.pagination.pageIndex; </script> <!-- 直接使用当前页码 --> <p>当前页码:{currentPage + 1}</p> <SvelteTable {table} />
2. 在onPaginationChange里通过updater获取新状态
如果一定要在onPaginationChange里处理,可以调用safeUpdater并传入回调,回调参数是更新前的状态,你可以基于它获取新状态,同步到本地变量:
<script> import { createSvelteTable } from '@svelteuidev/core'; import { data } from './your-data-source.js'; let currentPageIndex = 0; const table = createSvelteTable({ data, pagination: { pageIndex: currentPageIndex, pageSize: 10 }, onPaginationChange: (updater) => { // 调用updater拿到当前状态,直接返回即可获取新状态 const newPaginationState = updater(prevState => prevState); currentPageIndex = newPaginationState.pageIndex; // 如果需要主动修改状态(比如跳转指定页码),可以这么写: // updater(prev => ({ ...prev, pageIndex: 2 })); } }); </script> <p>当前页码:{currentPageIndex + 1}</p> <SvelteTable {table} />
3. 手动订阅state存储
如果需要更精细的控制,也可以手动订阅table.state,在状态变化时更新本地变量:
<script> import { createSvelteTable } from '@svelteuidev/core'; import { data } from './your-data-source.js'; import { onDestroy } from 'svelte'; const table = createSvelteTable({ data, pagination: { pageIndex: 0, pageSize: 10 } }); let currentPageIndex = 0; const unsubscribe = table.state.subscribe(state => { currentPageIndex = state.pagination.pageIndex; }); // 组件销毁时取消订阅,避免内存泄漏 onDestroy(unsubscribe); </script> <p>当前页码:{currentPageIndex + 1}</p> <SvelteTable {table} />
内容的提问来源于stack exchange,提问作者Joimee Cajandab
相关产品推荐
相关产品推荐

