TanStack Table 【React Table v7 → v8】ページネーションのマイグレーション


こんにちはフロントエンドエンジニアの茶木です。
TanStack Table 便利ですよね。 React Table v7→v8のマイグレーションでページネーションについての勘所を解説しようと思います。

関連記事もありますので良かったらご覧ください

今回のページネーションは、ページごとのデータはページングの要求ごとにAPIなどを使ってサーバーから取得する想定のものです。

v7では

pageCount は 1ページあたりの行数、pageIndex はページ番号、pageSize はページ数です。よくあるのは URLQueryから取得するケースだと思います。

manualPagination は、今回のように、サーバーから1ページ分だけ要求するようなケースで使用します。( false のときは、取得したデータを React Table でページ分割します)

  const table = useTable(
    {
      columns,
      data,
      manualPagination: true,
      pageCount,
      initialState: {
        pageIndex:,
        pageSize,
      },
    },
    usePagination
  );

v8では

注目点は getPaginationRowModel: getPaginationRowModel() を指定すること、 initialState のメンバーに pagination が必要なことです。

  const table = useReactTable({
    columns,
    data,
    getCoreRowModel: getCoreRowModel(),
    getPaginationRowModel: getPaginationRowModel(),
    manualPagination: true,
    pageCount,
    initialState: {
      pagination: {
        pageIndex,
        pageSize,
      },
    },
  });

ページネーション情報を取得

table.getState() で pagination が取得できます。

const { pagination } = table.getState();
const { pageIndex, pageSize } = pagination;

ページの移動

v7 と同じようにできます。v7と少し違うのは、canPreviousePage canNextPage がメソッドになって、それぞれ getCanPreviousPage() getCanNextPage() になっているところは注意です。

table.setPageIndex( index )

table.firstPage()
table.previousPage()
table.getCanPreviousPage()

table.lastPage()
table.nextPage();
table.getCanNextPage()

おわりに

息の長いプロジェクトなどは、ライブラリのアップデートなど定期的なメンテナンスが必要になってきますね。Gaji-Labo では、機能開発とのバランスをみて、技術的負債を返済の提案も積極的に行ってエンジニア手動でメンテナンスも進めていきます。

Gaji-Laboでは、React経験が豊富なフロントエンドエンジニアを募集しています

弊社ではReactの知見で事業作りに貢献したいフロントエンドエンジニアを募集しています。大きな制作会社や事業会社とはひと味もふた味も違うGaji-Laboを味わいに来ませんか?

もちろん、一緒にお仕事をしてくださるパートナーさんも随時募集中です。まずはお気軽に声をかけてください。お仕事お問い合わせや採用への応募、共に大歓迎です!

求人応募してみる!

投稿者 Chaki Hironori

webライターもやってるフロントエンドエンジニアです。Reactは自信があります。またデザイン畑の出身で、気持ちのいいアニメーションやインタラクティブな表現は丁寧に手掛けます。好きなものは中南米の遺跡で、スペイン語が少しできます。