kaze風
Pagination
ページ分割されたコンテンツをナビゲートするページネーションコンポーネント。
プレビュー
使いどころ
使う場面
- 表や検索結果など、件数が多い一覧を、ページに分けて見せる
- page と onPageChange で制御する。任意の初期ページだけ決めるなら defaultPage(非制御)
- siblingCount(既定 1)で現在のページの前後に出す番号の数を調整する
使わない場面
- ページが 2 つ以下のとき。「もっと見る」ボタンのほうが軽い
- ページの位置が重要でない一覧。無限スクロールか「もっと見る」を検討する
- 手順の進行。Stepper を使う
- タブのように中身を切り替える操作。Tabs を使う
使い方
<Pagination
page={3}
totalPages={10}
onPageChange={(page) => setCurrentPage(page)}
/>プロパティ
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
page | number | なし | 現在のページ番号(制御。旧 currentPage) |
defaultPage | number | 1 | 初期ページ(非制御) |
totalPages必須 | number | なし | 総ページ数 |
onPageChange | (page: number) => void | なし | ページ変更時のコールバック |
siblingCount | number | 1 | 現在のページの前後に表示するページ数 |
label | string | なし | Accessible label for the nav element (default: "ページネーション") |
prevLabel | string | なし | Accessible label for the previous button (default: "前のページ") |
nextLabel | string | なし | Accessible label for the next button (default: "次のページ") |
pageLabel | (page: number) => string | なし | Accessible label for each page button (default: ${page}ページ目) |
型と必須かどうかはソースの型定義から自動で生成しています。表にない HTML 標準の属性(className や aria-* など)も、ルート要素にそのまま渡せます。
キーボード操作
| キー | 動作 |
|---|---|
| Tab / Shift + Tab | 前へ、ページ番号、次へのボタンに順番にフォーカスを移す |
| Enter / Space | フォーカス中のボタンを押してページを移動する |
アクセシビリティ
- <nav aria-label="ページネーション"> になる。現在のページには aria-current="page" が付く
- 各ボタンの名前は「3ページ目」のように読み上げられる。文言は pageLabel、prevLabel、nextLabel で変えられる
- 先頭では「前のページ」、末尾では「次のページ」が disabled になる。省略記号は読み上げられない
- ページを移動したら、表の先頭など内容の位置に合わせて、必要なら見出しにフォーカスを移す