usePagination
ページとページ数から、描画するページと省略記号のリストを生成し、ページが動いても長さを一定に保ちます。
siblings
7 itemspnpm dlx shadcn@latest add https://hextaui.com/r/use-pagination.jsonフックと、その依存関係をプロジェクトに追加します。
次のコードをコピーしてプロジェクトに貼り付けてください。
hooks/use-pagination.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
このフックは計算だけを行います。描画するページと省略記号のリストを返し、マークアップは任せます。Pagination がリンクを構築しているのもこの方法です。カルーセルのドットや、テーブルフッターのページ選択のような、独自のページャーを作るのに使えます。
リストは、最初と最後の boundaries ページと、現在のページの両側の siblings ページを常に表示します。2ページ以上の隙間は省略記号が埋めます。ちょうど1ページの隙間では、省略記号が占める以上のものを隠さないため、代わりにそのページを表示します。
ページが十分にあれば、リストは常に 2 × boundaries + 2 × siblings + 3 個の項目を持ちます。端の付近では、ウィンドウは縮まずに広がります。長さが変わらないため、ページャーの幅は保たれ、クリックして進んでいる間も次へ・前へのボタンはポインターの下に留まります。
countとpageは範囲内に収められます。末尾を超えたページは最後のページになり、有限の数値でないものはデフォルトにフォールバックします。countが0なら、項目なしでpageは0になるため、空のテーブルでも特別なケース処理なしに何も描画しないようにできます。siblingsとboundariesは0から10まで。- 省略記号は、
startまたはendの安定したpositionを持ちます。これを React の key として使います。
ドット
boundaries: 0 では、リストは現在のページの周りのウィンドウだけになります。省略記号は小さなドットになるため、長いスライドのセットでも、ターゲットは5つ以上必要ありません。
- 現在のページを
aria-current="page"でマークし、リストをラベル付きの<nav>で囲みます。 aria-hiddenで省略記号をスクリーンリーダーから隠します。ページ番号が伝える以上の情報はありません。- 桁が変わってもボタンの幅が変わらないよう、ページ番号は
tabular-numsで表示します。
| プロパティ | 型 | デフォルト |
|---|---|---|
count総ページ数。 | number | – |
page現在のページ。1から始まります。 | number | 1 |
siblings現在のページの両側に表示するページ数。 | number | 1 |
boundaries先頭と末尾に常に表示するページ数。 | number | 1 |
| プロパティ | 説明 |
|---|---|
items | 描画する PaginationItemData[]。順番どおり。 |
page | 範囲内に収められた現在のページ。 |
count | 範囲内に収められたページ数。 |
hasPrevious | このページの前にページがあるかどうか。 |
hasNext | このページの後にページがあるかどうか。 |
Pagination.