You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:15:32