Table
Tableは、列のソートや行の選択やクリックイベント機能を備えたテーブルのコンポーネントです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Estella | Kub | 28 | Faustino.Douglas@hotmail.com |
| 1 | Deven | Hayes | 50 | Annamae.Goodwin@gmail.com |
| 2 | Ariane | Pfeffer | 63 | Jazmyn.Krajcik@hotmail.com |
| 3 | Keshaun | Fritsch-Littel | 60 | Lucie.Cremin10@hotmail.com |
| 4 | Cooper | Trantow | 48 | Marjolaine.Cronin@hotmail.com |
| 5 | Wendy | Nicolas | 55 | Charlotte_Gorczany@yahoo.com |
| 6 | Coty | Smitham | 56 | Edmund78@gmail.com |
| 7 | Jessica | Bauch | 22 | Lesley_Murray@yahoo.com |
| 8 | Gerhard | Wisoky | 46 | Blake.Orn@yahoo.com |
| 9 | Turner | Beer | 38 | Phoebe94@gmail.com |
interface Data {
id: string
age: number
email: string
firstName: string
lastName: string
}
const columnHelper = createColumnHelper<Data>()
const columns = useMemo(
() => [
columnHelper.accessor("id", { cellProps: { numeric: true } }),
columnHelper.accessor("firstName", { lineClamp: 1 }),
columnHelper.accessor("lastName", { lineClamp: 1 }),
columnHelper.accessor("age", { cellProps: { numeric: true } }),
columnHelper.accessor("email", { lineClamp: 1 }),
],
[],
)
const data = useMemo<Data[]>(
() =>
Array.from({ length: 10 }, (_, index) => ({
id: index.toString(),
age: faker.number.int({ max: 65, min: 18 }),
email: faker.internet.email(),
firstName: faker.person.firstName(),
lastName: faker.person.lastName(),
})),
[],
)
return <Table columns={columns} data={data} withScrollArea />
使い方
import { Table } from "@yamada-ui/react"
import { Table } from "@/components/ui"
import { Table } from "@workspaces/ui"
<Table />
Tableは、内部でtanstack-tableとNativeTableを使用しています。バリアントを変更する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Roma | Satterfield | 40 | Annette21@hotmail.com |
| 1 | Rhiannon | Kuhlman | 34 | Rodolfo.Baumbach72@hotmail.com |
| 2 | Crawford | Von | 52 | Magali_Schuppe82@gmail.com |
| 3 | Pearlie | West | 60 | Cyrus.Feil@hotmail.com |
| 4 | Efrain | Stiedemann | 33 | Brenna_Harvey@hotmail.com |
| 5 | Martine | Nikolaus | 65 | Hildegard.Ziemann-Parisian44@hotmail.com |
| 6 | Sherman | Wintheiser | 49 | Sheldon_Erdman@gmail.com |
| 7 | Jenifer | Gulgowski | 53 | Abigail.Stroman@yahoo.com |
| 8 | Ricardo | Sipes | 64 | Cielo62@yahoo.com |
| 9 | Walker | Hagenes | 39 | Emilio98@gmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Roma | Satterfield | 40 | Annette21@hotmail.com |
| 1 | Rhiannon | Kuhlman | 34 | Rodolfo.Baumbach72@hotmail.com |
| 2 | Crawford | Von | 52 | Magali_Schuppe82@gmail.com |
| 3 | Pearlie | West | 60 | Cyrus.Feil@hotmail.com |
| 4 | Efrain | Stiedemann | 33 | Brenna_Harvey@hotmail.com |
| 5 | Martine | Nikolaus | 65 | Hildegard.Ziemann-Parisian44@hotmail.com |
| 6 | Sherman | Wintheiser | 49 | Sheldon_Erdman@gmail.com |
| 7 | Jenifer | Gulgowski | 53 | Abigail.Stroman@yahoo.com |
| 8 | Ricardo | Sipes | 64 | Cielo62@yahoo.com |
| 9 | Walker | Hagenes | 39 | Emilio98@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<VStack>
<For each={["line", "outline"]}>
{(variant, index) => (
<Table
key={index}
variant={variant}
columns={columns}
data={data}
withScrollArea
/>
)}
</For>
</VStack>
)
サイズを変更する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Tristian | Kuhlman | 28 | Vaughn_Cummerata54@gmail.com |
| 1 | Tierra | Pacocha | 30 | Pearline38@hotmail.com |
| 2 | Clint | Wiza | 30 | King_Renner@yahoo.com |
| 3 | Antonette | Hodkiewicz | 26 | Ethyl.Senger@gmail.com |
| 4 | Luis | Aufderhar | 25 | Jessie0@gmail.com |
| 5 | Helen | Prosacco | 39 | Roberto88@yahoo.com |
| 6 | Celestino | Wintheiser | 47 | Braden.Green29@gmail.com |
| 7 | Laney | Satterfield | 39 | Twila30@hotmail.com |
| 8 | Jeromy | Smith | 42 | Steve.Von61@gmail.com |
| 9 | Zelda | Gerlach | 60 | Benny.Skiles25@yahoo.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Tristian | Kuhlman | 28 | Vaughn_Cummerata54@gmail.com |
| 1 | Tierra | Pacocha | 30 | Pearline38@hotmail.com |
| 2 | Clint | Wiza | 30 | King_Renner@yahoo.com |
| 3 | Antonette | Hodkiewicz | 26 | Ethyl.Senger@gmail.com |
| 4 | Luis | Aufderhar | 25 | Jessie0@gmail.com |
| 5 | Helen | Prosacco | 39 | Roberto88@yahoo.com |
| 6 | Celestino | Wintheiser | 47 | Braden.Green29@gmail.com |
| 7 | Laney | Satterfield | 39 | Twila30@hotmail.com |
| 8 | Jeromy | Smith | 42 | Steve.Von61@gmail.com |
| 9 | Zelda | Gerlach | 60 | Benny.Skiles25@yahoo.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Tristian | Kuhlman | 28 | Vaughn_Cummerata54@gmail.com |
| 1 | Tierra | Pacocha | 30 | Pearline38@hotmail.com |
| 2 | Clint | Wiza | 30 | King_Renner@yahoo.com |
| 3 | Antonette | Hodkiewicz | 26 | Ethyl.Senger@gmail.com |
| 4 | Luis | Aufderhar | 25 | Jessie0@gmail.com |
| 5 | Helen | Prosacco | 39 | Roberto88@yahoo.com |
| 6 | Celestino | Wintheiser | 47 | Braden.Green29@gmail.com |
| 7 | Laney | Satterfield | 39 | Twila30@hotmail.com |
| 8 | Jeromy | Smith | 42 | Steve.Von61@gmail.com |
| 9 | Zelda | Gerlach | 60 | Benny.Skiles25@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<VStack>
<For each={["sm", "md", "lg"]}>
{(size, index) => (
<Table
key={index}
size={size}
columns={columns}
data={data}
withScrollArea
/>
)}
</For>
</VStack>
)
カラースキーマを変更する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Lou | Mills | 51 | Maci.Kohler8@gmail.com |
| 1 | Presley | Rath | 48 | Valentine22@hotmail.com |
| 2 | Aaron | Howell | 57 | Leonie.Spencer@gmail.com |
| 3 | Carmella | Torp | 37 | Emerson63@gmail.com |
| 4 | Hillard | D'Amore | 43 | Kurt_Hudson@gmail.com |
| 5 | Hollie | Hudson | 24 | Esteban_Reilly@hotmail.com |
| 6 | Manuela | Muller | 59 | Ettie95@gmail.com |
| 7 | Domenick | Heidenreich | 31 | Llewellyn11@hotmail.com |
| 8 | Ella | Krajcik | 50 | Addie_Bernhard@yahoo.com |
| 9 | Vivian | Monahan | 18 | Edyth_Weissnat@gmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Lou | Mills | 51 | Maci.Kohler8@gmail.com |
| 1 | Presley | Rath | 48 | Valentine22@hotmail.com |
| 2 | Aaron | Howell | 57 | Leonie.Spencer@gmail.com |
| 3 | Carmella | Torp | 37 | Emerson63@gmail.com |
| 4 | Hillard | D'Amore | 43 | Kurt_Hudson@gmail.com |
| 5 | Hollie | Hudson | 24 | Esteban_Reilly@hotmail.com |
| 6 | Manuela | Muller | 59 | Ettie95@gmail.com |
| 7 | Domenick | Heidenreich | 31 | Llewellyn11@hotmail.com |
| 8 | Ella | Krajcik | 50 | Addie_Bernhard@yahoo.com |
| 9 | Vivian | Monahan | 18 | Edyth_Weissnat@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<VStack>
<For each={["green", "orange"]}>
{(colorScheme, index) => (
<Table
key={index}
colorScheme={colorScheme}
variant="outline"
columns={columns}
data={data}
withScrollArea
/>
)}
</For>
</VStack>
)
外枠の区切り線を追加する
外枠の区切り線を追加する場合は、withBorderをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Chaz | Lueilwitz | 53 | Russel13@hotmail.com |
| 1 | Wyatt | Fay | 40 | Vincenzo_Keebler@yahoo.com |
| 2 | Mariela | Schmeler | 40 | Daphnee53@gmail.com |
| 3 | Halie | Reynolds | 64 | Dora_Steuber60@hotmail.com |
| 4 | Reta | Ortiz-Mann | 43 | Nickolas.Trantow34@gmail.com |
| 5 | Narciso | Cassin-Williamson | 45 | Dandre.King2@gmail.com |
| 6 | Elsie | Beahan-Beier | 48 | Judah_Stark@hotmail.com |
| 7 | Rusty | Hintz-Heidenreich | 38 | Corine93@hotmail.com |
| 8 | Izaiah | Nienow | 35 | Mose70@yahoo.com |
| 9 | Jairo | Orn | 29 | Jaylen75@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} withBorder withScrollArea />
列の区切り線を追加する
列の区切り線を追加する場合は、withColumnBordersをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Rex | Stroman | 37 | Mattie_Kerluke10@gmail.com |
| 1 | Nelle | Lynch | 28 | Anibal_Emmerich45@hotmail.com |
| 2 | Kelli | Heaney | 63 | Dana_Krajcik@hotmail.com |
| 3 | Ellsworth | Jacobson | 62 | Antonietta.Schroeder32@yahoo.com |
| 4 | Maude | Balistreri | 33 | Luciano_Gorczany@gmail.com |
| 5 | Lloyd | Effertz | 36 | Antoinette12@yahoo.com |
| 6 | Enola | Stehr | 34 | Deontae96@yahoo.com |
| 7 | Garry | Gislason | 20 | Reina.Carroll18@gmail.com |
| 8 | Delta | McGlynn | 34 | Zola_Langworth36@yahoo.com |
| 9 | Isobel | Gulgowski | 43 | Gianni.Hamill45@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} withColumnBorders withScrollArea />
行がホバーされたときにハイライトする
行がホバーされたときにハイライトする場合は、highlightOnHoverをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Emmanuel | Hand | 46 | Celestino58@hotmail.com |
| 1 | Edward | Hermiston-Bartoletti | 51 | Pauline_Hegmann68@yahoo.com |
| 2 | Alessia | Anderson | 34 | Toy.Rutherford43@hotmail.com |
| 3 | Marlene | Mann | 60 | Akeem.Cummings68@gmail.com |
| 4 | Fermin | Bruen | 51 | Leila11@yahoo.com |
| 5 | Kade | Dickens | 43 | Luz.Feil@yahoo.com |
| 6 | Theresia | Morar | 35 | Bethel_Cassin67@gmail.com |
| 7 | Raheem | VonRueden | 21 | Lori20@gmail.com |
| 8 | Emie | Walter | 64 | Kennedi_Zieme55@gmail.com |
| 9 | Omer | Kessler | 35 | Xander_Collier44@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} highlightOnHover withScrollArea />
ストライプを使う
ストライプを使う場合は、stripedをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Garnet | Rutherford | 62 | Kaitlin88@yahoo.com |
| 1 | Henriette | Hilpert | 56 | Myrl.Williamson84@yahoo.com |
| 2 | Bo | Wolff | 18 | Rusty60@hotmail.com |
| 3 | Merlin | Stanton | 55 | Emmet_Cassin@hotmail.com |
| 4 | Edgardo | Renner | 40 | Arden.Klein@hotmail.com |
| 5 | Thelma | Bauch | 62 | Fiona_Hessel@yahoo.com |
| 6 | Solon | Dibbert | 25 | Trey_Fahey@hotmail.com |
| 7 | Savion | O'Kon | 60 | Leopold.Herzog@yahoo.com |
| 8 | Dorthy | Carroll | 54 | Camila_Bruen40@gmail.com |
| 9 | Zita | Mayert | 34 | Keira.Reichel59@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} striped withScrollArea />
スクロールエリアを使う
スクロールエリアを使う場合は、withScrollAreaをtrueにします。
| id | firstName | lastName | age | phone | role | status | createdAt | updatedAt | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | Orin | Heathcote | 32 | Mozelle.Tremblay32@gmail.com | 975.931.1729 x8261 | admin | inactive | 2/15/2025 | 11/28/2025 |
| 1 | Frieda | Hickle-Carter | 34 | Daniela_Heller66@hotmail.com | (513) 825-9344 x6529 | user | active | 1/27/2025 | 2/6/2025 |
| 2 | Katheryn | Christiansen | 19 | Isabell.Moore@yahoo.com | 1-691-256-6172 | user | inactive | 6/17/2025 | 8/13/2025 |
| 3 | Eugene | Hickle | 57 | Cecile0@gmail.com | 1-970-855-1924 x678 | admin | active | 12/10/2025 | 6/12/2025 |
| 4 | Flavio | Windler | 57 | Jaydon.Abernathy81@gmail.com | (792) 500-1128 x69249 | admin | active | 7/12/2025 | 10/22/2025 |
| 5 | Hermann | Upton | 30 | Laney46@yahoo.com | 292.333.5354 x561 | admin | active | 9/21/2025 | 8/22/2025 |
| 6 | Kieran | Bosco | 46 | Webster7@gmail.com | (653) 400-2541 x5086 | user | active | 12/4/2025 | 3/9/2025 |
| 7 | Lew | Kreiger | 20 | Carrie.Hermiston36@gmail.com | 1-823-697-7661 x54323 | admin | inactive | 9/12/2025 | 10/15/2025 |
| 8 | Charity | Marks | 40 | Trystan_Strosin-Jacobson@yahoo.com | 743-738-6891 x113 | user | inactive | 3/7/2025 | 7/7/2025 |
| 9 | Nakia | McKenzie | 18 | Warren.OConner18@yahoo.com | (313) 731-3151 x003 | admin | active | 1/27/2025 | 1/20/2025 |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columnsFull} data={data} withScrollArea />
ヘッダーグループ
| id | user | |||
|---|---|---|---|---|
| name | age | |||
| firstName | lastName | |||
| 0 | Alfredo | Emard | 20 | Raquel_Jacobi@yahoo.com |
| 1 | Liliana | Waelchi | 52 | Narciso_Nienow-Rice@hotmail.com |
| 2 | Boyd | Collins | 39 | Andrew.Sporer76@gmail.com |
| 3 | Cordie | McKenzie | 57 | Dorthy_Trantow92@gmail.com |
| 4 | Julien | Ferry | 18 | Karli4@hotmail.com |
| 5 | Trey | Hahn | 33 | Jillian26@yahoo.com |
| 6 | Burley | White | 48 | Susanna.Klein66@hotmail.com |
| 7 | Ransom | Rath | 43 | Syble36@yahoo.com |
| 8 | Cooper | Gislason | 48 | Marcel_Schumm@yahoo.com |
| 9 | Rhiannon | Turner | 27 | Alta1@hotmail.com |
const columns = useMemo(
() => [
columnHelper.accessor("id", {
footer: (info) => info.column.id,
cellProps: { numeric: true },
}),
columnHelper.group({
id: "user",
columns: [
columnHelper.group({
id: "name",
columns: [
columnHelper.accessor("firstName", {
footer: (info) => info.column.id,
lineClamp: 1,
}),
columnHelper.accessor("lastName", {
footer: (info) => info.column.id,
lineClamp: 1,
}),
],
footer: (info) => info.column.id,
header: (info) => info.column.id,
}),
columnHelper.accessor("age", {
footer: (info) => info.column.id,
cellProps: { numeric: true },
}),
columnHelper.accessor("email", {
footer: (info) => info.column.id,
lineClamp: 1,
}),
],
footer: (info) => info.column.id,
header: (info) => info.column.id,
}),
],
[],
)
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
withBorder
withColumnBorders
withScrollArea
/>
)
フッターグループ
| id | user | |||
|---|---|---|---|---|
| name | age | |||
| firstName | lastName | |||
| 0 | Kevon | Fisher | 65 | Lloyd_Kuphal65@gmail.com |
| 1 | Valentina | Reichel | 65 | Javier24@yahoo.com |
| 2 | Allie | Fahey | 45 | Franco33@hotmail.com |
| 3 | Haylee | Cormier | 50 | Susie_Upton66@yahoo.com |
| 4 | Burley | Beahan | 21 | Elenor52@hotmail.com |
| 5 | Natalia | Gleichner | 51 | Mckayla.Runolfsdottir@gmail.com |
| 6 | Annabell | Von | 55 | Myrtle.Dach18@gmail.com |
| 7 | Arch | Abbott | 48 | Cristal_Stracke19@hotmail.com |
| 8 | Dejon | Crooks | 47 | Marlen_Quigley25@gmail.com |
| 9 | Camren | Wolf | 61 | Kane.Parker@yahoo.com |
| id | firstName | lastName | age | |
| name | ||||
| user | ||||
const columns = useMemo(
() => [
columnHelper.accessor("id", {
footer: (info) => info.column.id,
cellProps: { numeric: true },
}),
columnHelper.group({
id: "user",
columns: [
columnHelper.group({
id: "name",
columns: [
columnHelper.accessor("firstName", {
footer: (info) => info.column.id,
lineClamp: 1,
}),
columnHelper.accessor("lastName", {
footer: (info) => info.column.id,
lineClamp: 1,
}),
],
footer: (info) => info.column.id,
header: (info) => info.column.id,
}),
columnHelper.accessor("age", {
footer: (info) => info.column.id,
cellProps: { numeric: true },
}),
columnHelper.accessor("email", {
footer: (info) => info.column.id,
lineClamp: 1,
}),
],
footer: (info) => info.column.id,
header: (info) => info.column.id,
}),
],
[],
)
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
withBorder
withColumnBorders
withFooterGroups
withScrollArea
/>
)
キーボードナビゲーションを無効にする
キーボードナビゲーションを無効にする場合は、enableKeyboardNavigationをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Estel | Nolan | 46 | Flossie32@hotmail.com |
| 1 | Robert | Schiller | 29 | Jammie.Wehner13@gmail.com |
| 2 | Melyssa | Howell | 26 | Aron_Raynor@hotmail.com |
| 3 | Shemar | Pfannerstill | 40 | Brannon_Weber79@gmail.com |
| 4 | Adan | Schmidt | 22 | Antonetta.Schroeder@hotmail.com |
| 5 | Kraig | Kozey | 58 | Paige44@gmail.com |
| 6 | Destini | Romaguera | 54 | Mervin_Bayer@hotmail.com |
| 7 | Amiya | Stark | 37 | Alexandro.Heathcote77@yahoo.com |
| 8 | Clementine | Crona | 23 | Luella95@yahoo.com |
| 9 | Sammie | Reichel | 45 | Rose.Purdy@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableKeyboardNavigation={false}
withScrollArea
/>
)
初回のフォーカス可能なセルを設定する
初回のフォーカス可能なセルを設定する場合は、initialFocusableCellにセルの列と行を指定したオブジェクト({ colIndex: number, rowIndex: number })を設定します。デフォルトは、{ colIndex: 0, rowIndex: 0 }です。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Brook | Auer | 49 | Chadrick3@yahoo.com |
| 1 | Sarai | Morar | 57 | Junius.Quigley79@gmail.com |
| 2 | Rogelio | Hintz | 51 | Ian.Towne80@gmail.com |
| 3 | Ericka | Paucek | 18 | Greyson.Strosin@gmail.com |
| 4 | Billie | Bahringer | 56 | Reggie_Bosco@gmail.com |
| 5 | Janiya | Mohr | 34 | Zelma75@gmail.com |
| 6 | Maia | Corwin | 20 | Deja.Ebert68@hotmail.com |
| 7 | Lila | Schmitt | 23 | Levi77@gmail.com |
| 8 | Santino | Herman | 57 | Francis.Ernser10@hotmail.com |
| 9 | Arely | Vandervort | 56 | Audie_Funk58@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
initialFocusableCell={{ colIndex: 1, rowIndex: 0 }}
withScrollArea
/>
)
行のクリックイベントをハンドルする
行のクリックイベントをハンドルする場合は、onRowClickを使用します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Emie | Shanahan | 35 | Easter.OHara83@gmail.com |
| 1 | Faustino | Roob | 22 | Mikayla_Christiansen@gmail.com |
| 2 | Wilmer | Balistreri | 29 | Brian_Keeling@yahoo.com |
| 3 | Andres | Koelpin | 24 | Jalyn21@gmail.com |
| 4 | Gardner | Hilpert | 44 | Cathrine_Jerde@hotmail.com |
| 5 | Ebony | Huel | 23 | Otto_Lubowitz29@yahoo.com |
| 6 | Agustin | Cummerata | 62 | Ollie_Thompson@hotmail.com |
| 7 | Winnifred | DuBuque | 22 | Mariam.Sanford@yahoo.com |
| 8 | Josefa | Weimann | 61 | Kelly_Thompson23@hotmail.com |
| 9 | Isidro | Bernhard | 36 | Charity_Pfannerstill45@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
onRowClick={(row) => console.log(row)}
withScrollArea
/>
)
"use client"をファイルの上部に追加する必要があります。行のダブルクリックイベントをハンドルする
行のダブルクリックイベントをハンドルする場合は、onRowDoubleClickを使用します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Shirley | Carter | 44 | Madalyn_Dickens8@yahoo.com |
| 1 | Delphine | McDermott | 43 | Garry93@yahoo.com |
| 2 | Catharine | Prosacco | 56 | Britney70@gmail.com |
| 3 | Kristy | Cummings-Rau | 52 | Deshaun_Ziemann@yahoo.com |
| 4 | Mazie | Harber | 39 | Willard.Labadie@gmail.com |
| 5 | Cruz | Runolfsson | 21 | Ena77@hotmail.com |
| 6 | Dulce | Franecki | 33 | Avery.Blanda-Pagac61@yahoo.com |
| 7 | Lillian | Denesik | 56 | Isom34@hotmail.com |
| 8 | Reuben | Cummerata | 29 | Omer_Jacobson@gmail.com |
| 9 | Aliza | McLaughlin | 57 | Linnea_Gulgowski@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
onRowDoubleClick={(row) => console.log(row)}
withScrollArea
/>
)
"use client"をファイルの上部に追加する必要があります。デフォルトのソートを設定する
デフォルトのソートを設定する場合は、defaultSortingに配列を設定します。配列のオブジェクトには、ソートをする列のidと方向を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Elroy | Cole | 64 | Lisa.Cruickshank@gmail.com |
| 1 | Alyce | Williamson | 48 | Kendrick_Fritsch96@yahoo.com |
| 3 | Fanny | D'Amore | 46 | Marc94@gmail.com |
| 5 | Hailee | Oberbrunner | 45 | Kennedy0@yahoo.com |
| 4 | Leonora | Stokes | 41 | Otto_Lakin@yahoo.com |
| 9 | Ole | Haag | 40 | Dedric_Kiehn@yahoo.com |
| 2 | Edwardo | Wiegand | 34 | Erich_Kertzmann@gmail.com |
| 7 | Danika | Streich | 31 | Brady_Batz12@hotmail.com |
| 8 | Kelsie | Ondricka | 30 | Hellen_Turner71@hotmail.com |
| 6 | Antone | Vandervort | 29 | Everett.Hettinger87@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
defaultSorting={[{ id: "age", desc: true }]}
withScrollArea
/>
)
ソートを無効にする
ソートを無効にする場合は、enableSortingをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Karina | Terry | 31 | Olin.Harber@gmail.com |
| 1 | Reanna | Bayer | 18 | Kaela_Lindgren-Kirlin68@yahoo.com |
| 2 | Cory | Baumbach | 60 | Howell.Kassulke51@hotmail.com |
| 3 | Stephan | Treutel | 43 | Corbin_Cassin80@hotmail.com |
| 4 | Zula | Cronin | 45 | Jonathan_Schaefer@yahoo.com |
| 5 | Scot | Altenwerth | 32 | Rosario_Trantow@gmail.com |
| 6 | Fernando | Schulist | 63 | Alysson_Bruen70@hotmail.com |
| 7 | Shakira | Gleichner | 54 | Amiya_Koelpin@yahoo.com |
| 8 | Valerie | Cremin | 27 | Reese.Beer59@hotmail.com |
| 9 | Angelina | Howe | 47 | Lane_Aufderhar@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table columns={columns} data={data} enableSorting={false} withScrollArea />
)
複数列のソートを無効にする
複数列のソートを無効にする場合は、enableMultiSortをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Easter | Smitham | 18 | Nicklaus_Schulist39@hotmail.com |
| 1 | Corbin | Torp | 40 | Kylie34@yahoo.com |
| 2 | Gabriella | MacGyver | 53 | Cyril83@yahoo.com |
| 3 | Rhianna | Rippin | 48 | Madison72@gmail.com |
| 4 | Warren | Olson | 21 | Hoyt37@yahoo.com |
| 5 | Gus | Rogahn | 63 | Hyman.Bayer18@yahoo.com |
| 6 | Virgie | Kuhic | 60 | Marlen45@yahoo.com |
| 7 | Mina | Lebsack | 25 | Percival_Green-OConnell54@gmail.com |
| 8 | Maya | Bauch | 19 | Henriette_Stroman0@yahoo.com |
| 9 | Jaycee | Hegmann | 19 | Misty.Lemke18@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table columns={columns} data={data} enableMultiSort={false} withScrollArea />
)
最大のソート可能な列数を設定する
最大のソート可能な列数を設定する場合は、maxMultiSortColCountに数値を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Hannah | Weimann | 34 | Karson_Hansen11@yahoo.com |
| 1 | Willow | Wolff | 54 | Kyler_Ritchie@hotmail.com |
| 2 | Marquise | Romaguera | 57 | Janis.Terry@gmail.com |
| 3 | Axel | Effertz | 28 | Cassandra56@yahoo.com |
| 4 | Lillie | Bode | 38 | Armando16@gmail.com |
| 5 | Patience | Bergstrom | 41 | Susan_Morissette-Kassulke16@gmail.com |
| 6 | Clifton | Hickle | 40 | Brendon43@hotmail.com |
| 7 | Nyah | Torp | 27 | Alivia31@yahoo.com |
| 8 | Mac | Conn | 40 | Santino_Bradtke@yahoo.com |
| 9 | Laverne | Swift | 43 | Hilton_Kiehn@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
maxMultiSortColCount={2}
withScrollArea
/>
)
手動のソートを使う
手動のソートを使う場合は、manualSortingをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Dane | Bayer | 32 | Jerel.Daugherty@gmail.com |
| 1 | Halie | Sanford | 19 | Nicole1@hotmail.com |
| 2 | Cruz | Dibbert | 24 | Cale.Jast@yahoo.com |
| 3 | Linnie | Ankunding-Considine | 19 | Demond.Rutherford18@yahoo.com |
| 4 | Joanne | O'Reilly | 60 | Heloise_Koepp@gmail.com |
| 5 | Madie | Hamill | 56 | Eula.Grant@gmail.com |
| 6 | Efren | Bruen | 35 | Marjorie2@yahoo.com |
| 7 | Brett | Willms | 46 | Brisa_Glover@gmail.com |
| 8 | Russ | Ruecker | 23 | Nettie_Labadie42@hotmail.com |
| 9 | Julia | Jacobi | 50 | Marcelina.Stehr@gmail.com |
const defaultData = useMemo<Data[]>(() => createData(), [])
const [data, setData] = useState<Data[]>(defaultData)
return (
<Table
columns={columns}
data={data}
withScrollArea
enableMultiSort={false}
manualSorting
onSortingChange={(sorting) => {
if (sorting.length) {
const { id, desc } = sorting[0]!
setData((prev) =>
prev.toSorted((a, b) => {
if (isNumber(a[id]) && isNumber(b[id])) {
return desc ? a[id] - b[id] : b[id] - a[id]
} else if (isString(a[id]) && isString(b[id])) {
return desc
? a[id].localeCompare(b[id])
: b[id].localeCompare(a[id])
}
return 0
}),
)
} else {
setData(defaultData)
}
console.log(sorting)
}}
/>
)
"use client"をファイルの上部に追加する必要があります。ソートの切り替えを変更する
デフォルトでは、ソートが有効になったとき、昇順から始まります。もし、降順から始めたい場合は、sortDescFirstをtrueに設定するか、特定の列だけ設定したい場合は、columnsの列ごとにsortDescFirstをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Anais | Tillman | 30 | Retta83@hotmail.com |
| 1 | Russ | Jakubowski | 50 | Myrtice_Gorczany10@gmail.com |
| 2 | Ramona | Nienow | 26 | Jacklyn.Carroll@yahoo.com |
| 3 | Jerod | Kozey | 60 | Ernest_Fahey@yahoo.com |
| 4 | Jerry | Batz | 55 | Jimmie.Walker@gmail.com |
| 5 | Rodrigo | Bruen | 37 | Kobe59@hotmail.com |
| 6 | Macey | Kassulke-Moore | 21 | Santos10@yahoo.com |
| 7 | Jewell | Bradtke | 41 | Katrina_Hermiston@gmail.com |
| 8 | Brittany | Stark | 30 | Jackson_Reinger68@yahoo.com |
| 9 | Jarod | Leuschke | 34 | Lauren.Kessler6@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} sortDescFirst withScrollArea />
ソートを制御する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Georgette | West | 23 | Carlos79@gmail.com |
| 1 | Shannon | Lehner | 23 | Concepcion_Rippin@hotmail.com |
| 2 | Tressa | Stark | 33 | Nikolas.Beier71@hotmail.com |
| 3 | Johathan | Fadel | 29 | Antonetta.Medhurst22@yahoo.com |
| 4 | Camryn | Schumm | 35 | Evan_Turcotte@gmail.com |
| 5 | Lorine | Kris | 54 | Rosalee_Cartwright41@gmail.com |
| 6 | Twila | Gerlach-Reinger | 31 | Humberto10@hotmail.com |
| 7 | Rowena | Huels | 25 | Jarod10@gmail.com |
| 8 | Marcelino | Franey | 35 | Malachi_Jacobi@gmail.com |
| 9 | Francesco | Schimmel | 43 | Yoshiko.Kozey91@yahoo.com |
const [sorting, setSorting] = useState<SortingState<Data>>([
{ id: "age", desc: true },
])
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} withScrollArea />
"use client"をファイルの上部に追加する必要があります。ページネーションを有効にする
ページネーションを有効にする場合は、enablePaginationをtrueに設定し、ページネーションをコントロールするコンポーネントをheaderまたはfooterに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Maye | Schulist | 54 | Neil.Effertz@gmail.com |
| 1 | Abagail | Hilll | 61 | Abel.Bernier54@yahoo.com |
| 2 | Gail | Bernhard | 58 | Paris_Boyer@gmail.com |
| 3 | Aisha | Herman | 25 | Marlene75@hotmail.com |
| 4 | Dangelo | Wuckert | 28 | Maye.Fisher69@hotmail.com |
| 5 | Rhett | Veum | 32 | Shyanne13@yahoo.com |
| 6 | Vanessa | Mertz | 37 | Gust.Steuber@yahoo.com |
| 7 | Marietta | Mills | 28 | Barney.Schowalter-Stoltenberg28@gmail.com |
| 8 | Dale | Hahn | 18 | Jonathon_Rohan92@gmail.com |
| 9 | Lupe | Brown | 36 | Ed90@yahoo.com |
| 10 | Damaris | Friesen | 59 | Mikayla8@hotmail.com |
| 11 | Camryn | Rolfson | 19 | Dena19@hotmail.com |
| 12 | Neha | Lueilwitz | 46 | Ole.Altenwerth@yahoo.com |
| 13 | Ariel | Wolf | 18 | Emmitt_Rath@yahoo.com |
| 14 | Thea | McClure | 31 | Tremayne99@yahoo.com |
| 15 | Tia | Kozey | 33 | Shad.Zulauf@hotmail.com |
| 16 | Zoila | Robel | 58 | Afton_Crooks@gmail.com |
| 17 | Braulio | Parisian | 62 | Garry_Hayes20@hotmail.com |
| 18 | Erna | Mayert | 43 | Brianne_Luettgen@gmail.com |
| 19 | Dina | Conroy | 47 | America_Torp@gmail.com |
const { t } = useI18n("table")
const data = useMemo<Data[]>(() => createData(40), [])
return (
<VStack>
<Table
columns={columns}
data={data}
enablePagination
footer={(table) => {
const page = table.getState().pagination.pageIndex + 1
const pageSize = table.getState().pagination.pageSize
const total = table.getPageCount()
return (
<Grid templateColumns="1fr 1fr 1fr" w="full">
<Pagination.Root
size={{ base: "sm", sm: "xs" }}
gridColumn="2 / 3"
page={page}
total={total}
onChange={(page) => table.setPageIndex(page - 1)}
/>
<Select.Root
size={{ base: "sm", sm: "xs" }}
aria-label={t("Page size")}
items={[
{ label: "10", value: "10" },
{ label: "20", value: "20" },
{ label: "30", value: "30" },
{ label: "40", value: "40" },
{ label: "50", value: "50" },
]}
value={pageSize.toString()}
rootProps={{ justifySelf: "end", w: "5xs" }}
onChange={(value) => table.setPageSize(Number(value))}
/>
</Grid>
)
}}
withScrollArea
/>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。デフォルトのページインデックスとページサイズを設定する
デフォルトのページインデックスとページサイズを設定する場合は、defaultPaginationにオブジェクトを設定します。オブジェクトには、pageIndexとpageSizeを設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 10 | Zackary | Parisian | 24 | Magali_Shanahan78@hotmail.com |
| 11 | Jeramy | Frami | 56 | Cassandra61@gmail.com |
| 12 | Keara | Connelly | 47 | Tabitha.Reynolds@hotmail.com |
| 13 | Cecilia | D'Amore | 65 | Quinn.Bernier25@hotmail.com |
| 14 | Myrtice | Quitzon | 61 | Enoch_Hahn36@yahoo.com |
| 15 | Mazie | Hauck | 65 | Shania_Wintheiser@yahoo.com |
| 16 | Gerardo | Bartell | 45 | Jean_Bergstrom@gmail.com |
| 17 | Valentin | Stroman | 59 | Beryl_Effertz@gmail.com |
| 18 | Eloy | Hodkiewicz | 56 | Stuart90@yahoo.com |
| 19 | Rae | Kilback | 63 | Rhiannon_Weissnat11@hotmail.com |
const { t } = useI18n("table")
const data = useMemo<Data[]>(() => createData(20), [])
return (
<VStack>
<Table
columns={columns}
data={data}
enablePagination
defaultPagination={{ pageIndex: 1, pageSize: 10 }}
footer={(table) => {
const page = table.getState().pagination.pageIndex + 1
const pageSize = table.getState().pagination.pageSize
const total = table.getPageCount()
return (
<Grid templateColumns="1fr 1fr 1fr" w="full">
<Pagination.Root
size={{ base: "sm", sm: "xs" }}
gridColumn="2 / 3"
page={page}
total={total}
onChange={(page) => table.setPageIndex(page - 1)}
/>
<Select.Root
size={{ base: "sm", sm: "xs" }}
aria-label={t("Page size")}
items={[
{ label: "10", value: "10" },
{ label: "20", value: "20" },
{ label: "30", value: "30" },
{ label: "40", value: "40" },
{ label: "50", value: "50" },
]}
value={pageSize.toString()}
rootProps={{ justifySelf: "end", w: "5xs" }}
onChange={(value) => table.setPageSize(Number(value))}
/>
</Grid>
)
}}
withScrollArea
/>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。手動のページネーションを使う
手動のページネーションを使う場合は、manualPaginationをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Otha | Brakus | 44 | Garfield.McDermott44@gmail.com |
| 1 | Alfredo | Hickle | 30 | Elisa.Torphy@hotmail.com |
| 2 | Angeline | Cummerata | 60 | Zelma68@yahoo.com |
| 3 | Gracie | Fay | 28 | Jadon.Wilkinson-Will@yahoo.com |
| 4 | Magnolia | Lang | 41 | Evangeline_Skiles@hotmail.com |
| 5 | Name | Rohan | 60 | Quentin.Ziemann77@hotmail.com |
| 6 | Javon | Oberbrunner | 51 | Lempi_Willms24@gmail.com |
| 7 | Lempi | Schamberger | 29 | Anissa42@hotmail.com |
| 8 | Kiley | Marvin | 25 | Olin_Bergstrom-Abshire@hotmail.com |
| 9 | Derek | Leffler | 21 | Dwight.Padberg17@yahoo.com |
| 10 | Isabell | Kuhic | 45 | Damaris.Morar97@hotmail.com |
| 11 | Rickey | Lesch | 62 | Roosevelt_Larkin@hotmail.com |
| 12 | Crystal | Pfeffer | 32 | Shakira78@gmail.com |
| 13 | Geoffrey | Sanford | 45 | Sylvia.Marks@gmail.com |
| 14 | Jacquelyn | Auer | 56 | Angie16@hotmail.com |
| 15 | Trystan | Torp | 62 | Ayana.OKon@hotmail.com |
| 16 | Darrick | Steuber | 49 | Vito54@yahoo.com |
| 17 | Jaclyn | Goyette | 48 | Kari_Bogisich21@gmail.com |
| 18 | Adrien | Shields | 49 | Webster_Bartoletti@hotmail.com |
| 19 | Rodrick | Bauch | 40 | Toy_Bednar84@yahoo.com |
const { t } = useI18n("table")
const [pagination, setPagination] = useState<PaginationState>({
pageIndex: 0,
pageSize: 20,
})
const rowCount = 40
const defaultData = useMemo<Data[]>(() => createData(rowCount), [])
const data = useMemo<Data[]>(
() =>
defaultData.slice(
pagination.pageIndex * pagination.pageSize,
(pagination.pageIndex + 1) * pagination.pageSize,
),
[defaultData, pagination],
)
return (
<VStack>
<Table
columns={columns}
data={data}
enablePagination
manualPagination
pagination={pagination}
rowCount={rowCount}
onPaginationChange={setPagination}
footer={(table) => {
const page = table.getState().pagination.pageIndex + 1
const pageSize = table.getState().pagination.pageSize
const total = table.getPageCount()
return (
<Grid templateColumns="1fr 1fr 1fr" w="full">
<Pagination.Root
size={{ base: "sm", sm: "xs" }}
gridColumn="2 / 3"
page={page}
total={total}
onChange={(page) => table.setPageIndex(page - 1)}
/>
<Select.Root
size={{ base: "sm", sm: "xs" }}
aria-label={t("Page size")}
items={[
{ label: "10", value: "10" },
{ label: "20", value: "20" },
{ label: "30", value: "30" },
{ label: "40", value: "40" },
{ label: "50", value: "50" },
]}
value={pageSize.toString()}
rootProps={{ justifySelf: "end", w: "5xs" }}
onChange={(value) => table.setPageSize(Number(value))}
/>
</Grid>
)
}}
withScrollArea
/>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。ページネーションを制御する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Caroline | Spencer | 28 | Julie_Crooks@yahoo.com |
| 1 | Gene | Schaefer | 18 | Lura64@yahoo.com |
| 2 | Christopher | Moen | 62 | Tania_Donnelly9@gmail.com |
| 3 | Elinore | Price | 38 | Jules39@hotmail.com |
| 4 | Garth | Torp | 46 | Eriberto_Schneider-Jacobson57@yahoo.com |
| 5 | Keshawn | Reichel | 55 | Alva_Crona@yahoo.com |
| 6 | Gail | Keebler | 65 | Pinkie_Lockman5@gmail.com |
| 7 | Rosamond | Steuber | 24 | Ephraim.Marquardt@hotmail.com |
| 8 | Rex | Bartoletti | 58 | Ayana_Fisher41@hotmail.com |
| 9 | Mack | Gerlach | 19 | Rosamond81@gmail.com |
| 10 | Krista | Williamson | 43 | Lonzo4@yahoo.com |
| 11 | Oswaldo | Weimann | 18 | Dena78@hotmail.com |
| 12 | Zelda | Metz | 45 | Ora_Torp@yahoo.com |
| 13 | Luigi | Krajcik | 52 | Wilber23@gmail.com |
| 14 | Aubrey | Conn | 55 | Marshall98@hotmail.com |
| 15 | Ernestine | Gleason | 61 | Bradley.Kshlerin@gmail.com |
| 16 | Monserrate | Trantow | 21 | Alvis.Greenfelder@yahoo.com |
| 17 | Shirley | Bergstrom | 37 | Sadie.Stroman-Harber@hotmail.com |
| 18 | Nasir | McClure-Kreiger | 60 | Cassie.Boyle@gmail.com |
| 19 | Margot | Romaguera | 53 | Kasandra_McGlynn20@yahoo.com |
const [pagination, setPagination] = useState<PaginationState>({
pageIndex: 0,
pageSize: 20,
})
const { t } = useI18n("table")
const data = useMemo<Data[]>(() => createData(40), [])
return (
<VStack>
<Table
columns={columns}
data={data}
enablePagination
pagination={pagination}
onPaginationChange={setPagination}
footer={(table) => {
const page = table.getState().pagination.pageIndex + 1
const pageSize = table.getState().pagination.pageSize
const total = table.getPageCount()
return (
<Grid templateColumns="1fr 1fr 1fr" w="full">
<Pagination.Root
size={{ base: "sm", sm: "xs" }}
gridColumn="2 / 3"
page={page}
total={total}
onChange={(page) => table.setPageIndex(page - 1)}
/>
<Select.Root
size={{ base: "sm", sm: "xs" }}
aria-label={t("Page size")}
items={[
{ label: "10", value: "10" },
{ label: "20", value: "20" },
{ label: "30", value: "30" },
{ label: "40", value: "40" },
{ label: "50", value: "50" },
]}
value={pageSize.toString()}
rootProps={{ justifySelf: "end", w: "5xs" }}
onChange={(value) => table.setPageSize(Number(value))}
/>
</Grid>
)
}}
withScrollArea
/>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。行の選択を有効にする
行の選択を有効にする場合は、enableRowSelectionをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Kristy | Stracke | 42 | Nellie_Purdy18@gmail.com | |
| 1 | Christine | Barton | 20 | Chandler_Yost@yahoo.com | |
| 2 | Francesco | Ondricka | 49 | Alycia26@hotmail.com | |
| 3 | Shanelle | Grimes | 44 | Elena37@yahoo.com | |
| 4 | Wilfred | Champlin-Boyle | 19 | Paul85@hotmail.com | |
| 5 | Karley | Lakin | 29 | Ethan.Mills@gmail.com | |
| 6 | Oda | Okuneva | 40 | Kamren.Moore@yahoo.com | |
| 7 | Reyna | Turcotte | 30 | Phoebe_Wisozk76@hotmail.com | |
| 8 | Lura | Ankunding | 45 | Enos.Quitzon@yahoo.com | |
| 9 | Elyssa | Barton | 52 | Estefania_Mills1@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} enableRowSelection withScrollArea />
デフォルトの選択された行を設定する
デフォルトの選択された行を設定する場合は、defaultRowSelectionにdataのインデックスをキーとしたオブジェクトを設定します。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Ray | Kilback | 25 | Josh4@gmail.com | |
| 1 | Erwin | Dicki | 24 | Isaias67@yahoo.com | |
| 2 | Herman | Cole | 47 | Andy_Dooley@yahoo.com | |
| 3 | Marshall | Prosacco | 18 | Geovanni.Gleichner@hotmail.com | |
| 4 | Maye | Becker | 52 | Liliana.Davis@yahoo.com | |
| 5 | Shirley | Schiller | 23 | Mollie_Abshire@yahoo.com | |
| 6 | Bartholome | Gutmann | 23 | Dylan.Tillman@hotmail.com | |
| 7 | Emilio | Champlin | 59 | Emil.Cassin80@hotmail.com | |
| 8 | Sabrina | Oberbrunner-Toy | 39 | Barton95@yahoo.com | |
| 9 | Maud | Ondricka | 26 | Jada_Gusikowski@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
defaultRowSelection={{ 0: true }}
withScrollArea
/>
)
行のクリックで選択を有効にする
行のクリックで選択を有効にする場合は、selectOnClickRowをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Giovanna | Hudson | 58 | Eliseo_Streich@yahoo.com | |
| 1 | Giles | Murphy | 59 | Jessika.Johnston41@gmail.com | |
| 2 | Garnett | Willms | 56 | Augustine46@hotmail.com | |
| 3 | Addie | Feil | 50 | Sydnie_Balistreri@hotmail.com | |
| 4 | Napoleon | Jenkins | 45 | Kellie_Kilback50@hotmail.com | |
| 5 | Juana | Rath | 30 | Kylie.Jast@gmail.com | |
| 6 | Regan | Kassulke | 48 | Kurt.Nolan@yahoo.com | |
| 7 | Karolann | Price | 28 | Natalie.Schimmel60@hotmail.com | |
| 8 | Madilyn | Hegmann | 57 | Trenton_Quitzon82@gmail.com | |
| 9 | Madaline | Hackett | 27 | Minerva18@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
selectOnClickRow
withScrollArea
/>
)
チェックボックスを非表示にする
チェックボックスを非表示にする場合は、withCheckboxをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Dusty | Ratke | 30 | Nat_Herman29@gmail.com |
| 1 | Jaylen | Hayes | 42 | Alanna_Kihn36@hotmail.com |
| 2 | Shany | Renner | 20 | Lesly14@hotmail.com |
| 3 | Letha | Boyer | 21 | Alexandre33@hotmail.com |
| 4 | Robyn | Dickinson | 27 | Jaden89@gmail.com |
| 5 | Harmony | Beier | 20 | Denis_Pollich53@yahoo.com |
| 6 | Halle | Nikolaus | 30 | Nelson82@gmail.com |
| 7 | Annette | Greenfelder | 32 | Dejuan57@yahoo.com |
| 8 | Arturo | Lakin | 40 | Warren_OKon@yahoo.com |
| 9 | Domenick | Langworth | 21 | Benjamin.Schowalter82@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
selectOnClickRow
withCheckbox={false}
withScrollArea
/>
)
行を無効にする
行を無効にする場合は、enableRowSelectionに条件の関数を設定します。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Emilia | Pfeffer | 50 | Maude.Lind@yahoo.com | |
| 1 | Deontae | Zulauf | 62 | Joyce_Schulist78@gmail.com | |
| 2 | Marjorie | Skiles-Waelchi | 22 | Dorcas.Herzog33@gmail.com | |
| 3 | Autumn | Rowe | 31 | Alford67@yahoo.com | |
| 4 | Tamia | Stark | 57 | Agustin18@gmail.com | |
| 5 | Kyla | Thiel | 23 | Dee.Bins@gmail.com | |
| 6 | Marques | Maggio | 54 | Everett_Dickens@yahoo.com | |
| 7 | Furman | Weber | 27 | Maryam43@gmail.com | |
| 8 | Merle | Donnelly | 22 | Crystal53@gmail.com | |
| 9 | Oran | Tromp | 33 | Dorris.Christiansen43@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection={(row) => row.id !== "1"}
withScrollArea
/>
)
"use client"をファイルの上部に追加する必要があります。行の選択を制御する
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Andrew | Sawayn | 26 | Jewel_Bode@hotmail.com | |
| 1 | Adele | Mayert | 21 | Hazle_Murray@gmail.com | |
| 2 | Kelsi | Moen-Herzog | 22 | Orlando_Johnson41@gmail.com | |
| 3 | Domenick | Stanton | 62 | Newton.Boyle@yahoo.com | |
| 4 | Boris | Nader | 54 | Grayson80@hotmail.com | |
| 5 | Cody | Olson | 41 | Warren_Herzog@gmail.com | |
| 6 | Julien | Weissnat | 65 | Leopold81@gmail.com | |
| 7 | Zoie | Wolff | 49 | Rosalinda_Schuster74@hotmail.com | |
| 8 | Luisa | Boehm | 37 | Garland_Lind96@hotmail.com | |
| 9 | Emile | Beatty | 25 | Keon69@yahoo.com |
const [rowSelection, setRowSelection] = useState<RowSelectionState>({})
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
rowSelection={rowSelection}
onRowSelectionChange={setRowSelection}
withScrollArea
/>
)
"use client"をファイルの上部に追加する必要があります。フィルターを使う
フィルターを使う場合は、フィルターをコントロールするコンポーネントをheaderまたはfooterに設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Marjolaine | Raynor | 25 | Rosa_Purdy41@gmail.com |
| 1 | Bobbie | Pfeffer | 42 | Kasey.Anderson@gmail.com |
| 2 | Adelbert | Jast | 61 | Duane88@hotmail.com |
| 3 | Bennie | O'Conner | 39 | Mikel_Kilback@hotmail.com |
| 4 | Dan | Kuhlman | 48 | Nelson.Thiel31@gmail.com |
| 5 | Hilton | Konopelski | 18 | Reece57@yahoo.com |
| 6 | Ransom | King | 56 | Carey94@yahoo.com |
| 7 | Marina | Kutch | 31 | Kristina_Prosacco@yahoo.com |
| 8 | Clovis | Greenfelder | 19 | Dortha38@yahoo.com |
| 9 | Ernesto | VonRueden | 57 | Mittie.Kub37@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<VStack>
<Table
columns={columns}
data={data}
header={(table) => {
const value =
(table.getColumn("email")?.getFilterValue() as string | undefined) ??
""
return (
<InputGroup.Root>
<InputGroup.Element>
<SearchIcon />
</InputGroup.Element>
<Input
placeholder="Filter emails"
value={value}
onChange={(ev) =>
table.getColumn("email")?.setFilterValue(ev.target.value)
}
/>
</InputGroup.Root>
)
}}
withScrollArea
/>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。デフォルトのフィルターを設定する
デフォルトのフィルターを設定する場合は、defaultColumnFiltersに配列を設定します。配列のオブジェクトには、フィルターする列のidと値を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 4 | Nellie | Dietrich | 50 | Jefferey56@gmail.com |
| 7 | Theron | Considine | 43 | Claudine_Metz12@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<VStack>
<Table
columns={columns}
data={data}
defaultColumnFilters={[{ id: "email", value: "gmail" }]}
header={(table) => {
const value =
(table.getColumn("email")?.getFilterValue() as string | undefined) ??
""
return (
<InputGroup.Root>
<InputGroup.Element>
<SearchIcon />
</InputGroup.Element>
<Input
placeholder="Filter emails"
value={value}
onChange={(ev) =>
table.getColumn("email")?.setFilterValue(ev.target.value)
}
/>
</InputGroup.Root>
)
}}
withScrollArea
/>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。フィルターを制御する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Hailie | Kunde | 33 | Dasia.Gleason19@yahoo.com |
| 1 | Minnie | Considine | 64 | Rex78@hotmail.com |
| 2 | Taya | Brakus | 57 | Marlin_Carroll-Weber40@yahoo.com |
| 3 | Major | Emard | 20 | Orlando42@yahoo.com |
| 4 | Damien | Glover | 52 | Brando.Wisozk@yahoo.com |
| 5 | Jasper | Buckridge | 34 | Lilliana_Herzog29@yahoo.com |
| 6 | Greg | Walker | 55 | Norma.Hand@gmail.com |
| 7 | Jedediah | Dickens | 54 | Hardy4@hotmail.com |
| 8 | Cristopher | Franecki | 33 | Celestino.Maggio@hotmail.com |
| 9 | Ayla | Auer | 25 | Pierce.Walter31@gmail.com |
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([
{ id: "email", value: "" },
])
const data = useMemo<Data[]>(() => createData(), [])
return (
<VStack>
<Table
columns={columns}
data={data}
columnFilters={columnFilters}
onColumnFiltersChange={setColumnFilters}
header={(table) => {
const value =
(table.getColumn("email")?.getFilterValue() as string | undefined) ??
""
return (
<InputGroup.Root>
<InputGroup.Element>
<SearchIcon />
</InputGroup.Element>
<Input
placeholder="Filter emails"
value={value}
onChange={(ev) =>
table.getColumn("email")?.setFilterValue(ev.target.value)
}
/>
</InputGroup.Root>
)
}}
withScrollArea
/>
</VStack>
)
"use client"をファイルの上部に追加する必要があります。列のサイズ変更を有効にする
列のサイズ変更を有効にする場合は、enableColumnResizingをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Tyreek | Raynor-Powlowski | 57 | Richmond_Zemlak7@hotmail.com |
| 1 | Durward | Krajcik-Murray | 27 | Ryan87@gmail.com |
| 2 | Breanna | Bartoletti | 59 | Alexandrea_Ernser55@yahoo.com |
| 3 | Mariam | Bernier | 64 | Regan.Zieme@gmail.com |
| 4 | Mafalda | Bergnaum | 64 | Leslie47@yahoo.com |
| 5 | Chanelle | O'Kon | 25 | Berta_Lemke0@yahoo.com |
| 6 | Layne | Lehner | 57 | Irving96@hotmail.com |
| 7 | Brenna | Mueller | 45 | Rylee70@gmail.com |
| 8 | Roma | Powlowski | 32 | Albertha49@yahoo.com |
| 9 | Broderick | Little | 32 | Myrl57@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableColumnResizing
withBorder
withColumnBorders
/>
)
列のサイズ変更の方法を変更する
デフォルトでは、列のサイズ変更のタイミングは、ドラッグしている間に変更されます。ドラッグが終わったときに変更する場合は、columnResizeModeに"onEnd"を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Edmond | Upton | 51 | Aileen.Green@yahoo.com |
| 1 | Afton | Feest | 63 | Osborne_Luettgen@hotmail.com |
| 2 | Tillman | Gulgowski | 25 | Ramon_Schroeder-Bartell@gmail.com |
| 3 | William | Nitzsche | 61 | Destiny42@hotmail.com |
| 4 | Charlotte | Kris | 53 | Antonia99@yahoo.com |
| 5 | Nellie | Metz | 32 | Alexandro_Cartwright@gmail.com |
| 6 | Mustafa | McDermott | 43 | Hugh54@gmail.com |
| 7 | Bettye | Breitenberg | 60 | Anjali45@gmail.com |
| 8 | Dereck | Nikolaus | 33 | Bernita.Rice@hotmail.com |
| 9 | Estefania | Mosciski | 51 | Judy.Morissette24@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableColumnResizing
columnResizeMode="onEnd"
withBorder
withColumnBorders
/>
)
Props
アクセシビリティ
現在、v2の移行に伴い、このセクションは更新中です。