Table
Tableは、列のソートや行の選択やクリックイベント機能を備えたテーブルのコンポーネントです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Kelley | Becker-Tremblay | 30 | Hazle_Lind96@yahoo.com |
| 1 | Drew | Pouros | 29 | Douglas.Marquardt57@yahoo.com |
| 2 | Angelo | Paucek | 61 | Calvin_Mertz27@yahoo.com |
| 3 | Ismael | Bergnaum | 53 | Grace_Thompson43@gmail.com |
| 4 | Chad | Paucek | 32 | Ismael_Hane@gmail.com |
| 5 | Trevion | Kirlin | 42 | Aaliyah_Ziemann@yahoo.com |
| 6 | Myra | Schuster-Halvorson | 57 | Jeremy21@gmail.com |
| 7 | Alice | Welch | 32 | Darlene_Okuneva18@hotmail.com |
| 8 | Lyle | Jones | 62 | Golda24@gmail.com |
| 9 | Miguel | Russel | 37 | Roberto.Zboncak@yahoo.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 | Bonnie | Breitenberg | 30 | Pamela64@hotmail.com |
| 1 | Robin | Rohan | 55 | Pasquale11@gmail.com |
| 2 | Ella | Auer | 34 | Heidi_Stoltenberg57@gmail.com |
| 3 | Terence | Kerluke | 32 | Julio.Kuphal@yahoo.com |
| 4 | Cory | Stoltenberg | 53 | Sam97@hotmail.com |
| 5 | Marshall | Jones | 33 | Bethany_Reilly-Nienow82@yahoo.com |
| 6 | Damon | Gorczany | 40 | Lola52@hotmail.com |
| 7 | Brianne | Steuber | 55 | Brandyn25@gmail.com |
| 8 | Natasha | Kirlin | 23 | Jaqueline33@yahoo.com |
| 9 | Meghan | Dibbert | 40 | Adolf68@gmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Bonnie | Breitenberg | 30 | Pamela64@hotmail.com |
| 1 | Robin | Rohan | 55 | Pasquale11@gmail.com |
| 2 | Ella | Auer | 34 | Heidi_Stoltenberg57@gmail.com |
| 3 | Terence | Kerluke | 32 | Julio.Kuphal@yahoo.com |
| 4 | Cory | Stoltenberg | 53 | Sam97@hotmail.com |
| 5 | Marshall | Jones | 33 | Bethany_Reilly-Nienow82@yahoo.com |
| 6 | Damon | Gorczany | 40 | Lola52@hotmail.com |
| 7 | Brianne | Steuber | 55 | Brandyn25@gmail.com |
| 8 | Natasha | Kirlin | 23 | Jaqueline33@yahoo.com |
| 9 | Meghan | Dibbert | 40 | Adolf68@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 | Vincent | Jones | 39 | Earlene78@hotmail.com |
| 1 | Kara | Jenkins | 34 | Cecil.Beer-Klein@gmail.com |
| 2 | Patti | Wehner | 45 | Rudy_Davis5@hotmail.com |
| 3 | Tracy | Terry | 57 | Ebony.Gutkowski@gmail.com |
| 4 | Breanna | Skiles | 55 | Natalia34@yahoo.com |
| 5 | Yolanda | Ondricka | 49 | Angelo58@hotmail.com |
| 6 | Renee | Tremblay | 52 | Brandi.Oberbrunner26@gmail.com |
| 7 | Edmond | Satterfield | 53 | Regina.Pagac60@gmail.com |
| 8 | Edna | Lebsack | 45 | Billy_Schmitt63@hotmail.com |
| 9 | Maria | Predovic | 33 | Freda30@gmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Vincent | Jones | 39 | Earlene78@hotmail.com |
| 1 | Kara | Jenkins | 34 | Cecil.Beer-Klein@gmail.com |
| 2 | Patti | Wehner | 45 | Rudy_Davis5@hotmail.com |
| 3 | Tracy | Terry | 57 | Ebony.Gutkowski@gmail.com |
| 4 | Breanna | Skiles | 55 | Natalia34@yahoo.com |
| 5 | Yolanda | Ondricka | 49 | Angelo58@hotmail.com |
| 6 | Renee | Tremblay | 52 | Brandi.Oberbrunner26@gmail.com |
| 7 | Edmond | Satterfield | 53 | Regina.Pagac60@gmail.com |
| 8 | Edna | Lebsack | 45 | Billy_Schmitt63@hotmail.com |
| 9 | Maria | Predovic | 33 | Freda30@gmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Vincent | Jones | 39 | Earlene78@hotmail.com |
| 1 | Kara | Jenkins | 34 | Cecil.Beer-Klein@gmail.com |
| 2 | Patti | Wehner | 45 | Rudy_Davis5@hotmail.com |
| 3 | Tracy | Terry | 57 | Ebony.Gutkowski@gmail.com |
| 4 | Breanna | Skiles | 55 | Natalia34@yahoo.com |
| 5 | Yolanda | Ondricka | 49 | Angelo58@hotmail.com |
| 6 | Renee | Tremblay | 52 | Brandi.Oberbrunner26@gmail.com |
| 7 | Edmond | Satterfield | 53 | Regina.Pagac60@gmail.com |
| 8 | Edna | Lebsack | 45 | Billy_Schmitt63@hotmail.com |
| 9 | Maria | Predovic | 33 | Freda30@gmail.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 | Katie | Raynor | 59 | Francis.Considine@hotmail.com |
| 1 | Dedrick | Heathcote-Willms | 29 | Columbus_Hirthe84@yahoo.com |
| 2 | Rafael | Braun | 47 | Orville16@yahoo.com |
| 3 | Johnnie | Schinner | 40 | Christine.Ullrich8@yahoo.com |
| 4 | Larry | Schaden-Leffler | 62 | Sigurd60@yahoo.com |
| 5 | Morris | Toy | 65 | Dexter_Heaney43@gmail.com |
| 6 | Gideon | Marvin | 30 | Devin_Dare@yahoo.com |
| 7 | Johnathan | Kuhic | 24 | Isaac16@gmail.com |
| 8 | Titus | Prohaska | 52 | Gilbert88@hotmail.com |
| 9 | Lyle | McGlynn | 18 | Shannon57@hotmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Katie | Raynor | 59 | Francis.Considine@hotmail.com |
| 1 | Dedrick | Heathcote-Willms | 29 | Columbus_Hirthe84@yahoo.com |
| 2 | Rafael | Braun | 47 | Orville16@yahoo.com |
| 3 | Johnnie | Schinner | 40 | Christine.Ullrich8@yahoo.com |
| 4 | Larry | Schaden-Leffler | 62 | Sigurd60@yahoo.com |
| 5 | Morris | Toy | 65 | Dexter_Heaney43@gmail.com |
| 6 | Gideon | Marvin | 30 | Devin_Dare@yahoo.com |
| 7 | Johnathan | Kuhic | 24 | Isaac16@gmail.com |
| 8 | Titus | Prohaska | 52 | Gilbert88@hotmail.com |
| 9 | Lyle | McGlynn | 18 | Shannon57@hotmail.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 | Shawna | Schamberger | 54 | Gavin_Schaefer@hotmail.com |
| 1 | Jody | Will | 45 | Angie_Leannon76@hotmail.com |
| 2 | Gonzalo | Johnston | 53 | Dane.Mante@gmail.com |
| 3 | Oda | Bailey | 29 | Erika.Volkman@hotmail.com |
| 4 | Cathy | Ward | 48 | Gail.Krajcik21@yahoo.com |
| 5 | Francis | Bahringer | 62 | Wayne87@gmail.com |
| 6 | Cordell | Huels | 50 | Claudia.Daniel-Larkin@gmail.com |
| 7 | Frances | Yundt | 18 | Mercedes_Brakus@gmail.com |
| 8 | Nellie | Schimmel | 53 | Daren.Cruickshank90@hotmail.com |
| 9 | Dixie | Carter | 48 | Kurt21@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} withBorder withScrollArea />
列の区切り線を追加する
列の区切り線を追加する場合は、withColumnBordersをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Cindy | Kautzer | 30 | Will73@gmail.com |
| 1 | Eula | Morissette | 27 | Gladys40@hotmail.com |
| 2 | Melvin | Mitchell | 29 | Silas.Labadie@gmail.com |
| 3 | Christina | Bartell-Towne | 42 | General_Ernser78@yahoo.com |
| 4 | Harmon | Koch | 42 | Katrina88@gmail.com |
| 5 | Bo | Ward | 22 | Johnnie_Rohan@hotmail.com |
| 6 | Scott | Jerde | 27 | Richmond_Littel@hotmail.com |
| 7 | Blanca | Weimann | 51 | Corene_Rolfson@gmail.com |
| 8 | Berta | VonRueden | 30 | Rick_Medhurst79@yahoo.com |
| 9 | Darien | Gleichner | 33 | Mortimer.Jast@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} withColumnBorders withScrollArea />
行がホバーされたときにハイライトする
行がホバーされたときにハイライトする場合は、highlightOnHoverをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Charlene | Kling | 44 | Charlie.Morar23@hotmail.com |
| 1 | Ramona | Ankunding | 55 | Casper61@gmail.com |
| 2 | Lela | Rosenbaum | 57 | Westley.Zboncak94@gmail.com |
| 3 | Sadie | Wuckert | 24 | Makenzie87@hotmail.com |
| 4 | Miguel | O'Reilly | 55 | Tami.Gleichner85@yahoo.com |
| 5 | Gilberto | Beier | 31 | Belinda_Leuschke1@hotmail.com |
| 6 | Christine | Schumm | 29 | Dorothy.Jakubowski16@yahoo.com |
| 7 | Bridget | Parisian | 40 | Felipe.Schimmel75@yahoo.com |
| 8 | Sven | Howell | 29 | Pearl42@hotmail.com |
| 9 | Dale | Altenwerth | 52 | Pearline_Smith@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} highlightOnHover withScrollArea />
ストライプを使う
ストライプを使う場合は、stripedをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Kennedi | Rau | 65 | Al1@hotmail.com |
| 1 | Shannon | Raynor | 40 | Nash_Denesik@gmail.com |
| 2 | Agustina | Rath-Walker | 49 | Jeffery.Dickinson@gmail.com |
| 3 | Eula | Kuphal | 49 | Bridget.Jacobi82@hotmail.com |
| 4 | Emilio | Deckow | 36 | Peggy0@gmail.com |
| 5 | Edward | Mertz | 39 | Mable.Kessler@hotmail.com |
| 6 | Colby | Grant | 52 | Vernon23@gmail.com |
| 7 | Shirley | Fahey | 51 | Sheila.Kessler@yahoo.com |
| 8 | Dominick | Anderson | 55 | Adrian.Dach73@gmail.com |
| 9 | Darren | Haley | 19 | Hal_Beatty95@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 | Davin | Olson | 30 | Clyde79@gmail.com | 798-348-1728 x540 | admin | active | 6/8/2025 | 4/29/2025 |
| 1 | Ray | Christiansen | 63 | Ora.Howe@gmail.com | (736) 757-2274 x15912 | admin | active | 1/14/2026 | 3/5/2025 |
| 2 | Micah | Murphy | 50 | Brian_Goldner44@yahoo.com | 751.239.0198 x4498 | admin | active | 8/26/2025 | 9/29/2025 |
| 3 | Clifford | Goodwin | 21 | Patti.Donnelly49@hotmail.com | (460) 549-6379 x373 | user | active | 1/19/2026 | 1/12/2026 |
| 4 | Leonard | Moen | 54 | Hayden.Collier77@gmail.com | (440) 435-6236 x10911 | user | inactive | 5/16/2025 | 1/13/2026 |
| 5 | Veronica | Herzog | 54 | Christina.Romaguera-Kirlin@hotmail.com | 1-689-976-0248 x367 | user | inactive | 10/4/2025 | 10/5/2025 |
| 6 | Wayne | Swift | 30 | Andres.Effertz@hotmail.com | 728-351-8474 x528 | admin | inactive | 10/20/2025 | 6/8/2025 |
| 7 | Angelica | Willms | 20 | Traci.Dietrich43@gmail.com | (975) 230-3034 x9352 | admin | active | 11/27/2025 | 12/11/2025 |
| 8 | Theresa | Crooks | 25 | Joe_Ullrich11@hotmail.com | 743-443-9723 x11904 | admin | active | 4/30/2025 | 2/11/2026 |
| 9 | Pablo | Harris | 40 | Leslie_Wisoky@hotmail.com | 1-685-406-6376 x8229 | admin | active | 6/24/2025 | 2/8/2026 |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columnsFull} data={data} withScrollArea />
ヘッダーグループ
| id | user | |||
|---|---|---|---|---|
| name | age | |||
| firstName | lastName | |||
| 0 | Fannie | Prosacco-Little | 20 | Carla.Hartmann54@gmail.com |
| 1 | Marlene | Hahn | 55 | Casey50@hotmail.com |
| 2 | Lacy | Daniel | 55 | Maurice.Hackett@hotmail.com |
| 3 | Ted | Flatley | 44 | Jaden41@gmail.com |
| 4 | Yvonne | Howell | 56 | Emilia10@hotmail.com |
| 5 | Berta | Stracke | 50 | Traci.Daniel5@hotmail.com |
| 6 | Princess | Heidenreich | 45 | Melinda_Graham@yahoo.com |
| 7 | Jeffery | Robel | 59 | Cora_Yundt16@yahoo.com |
| 8 | Randal | Greenfelder | 53 | Baron_Gislason12@gmail.com |
| 9 | Andre | Considine | 19 | Dexter.Kub38@yahoo.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 | Vicenta | Marvin | 28 | Nestor_Paucek70@yahoo.com |
| 1 | Domenic | Welch | 62 | Stephania.Erdman98@yahoo.com |
| 2 | Alberta | Parker | 65 | Uriel.Thompson@yahoo.com |
| 3 | Toy | Maggio | 59 | Robin9@gmail.com |
| 4 | Archie | Goldner | 36 | Claudia69@hotmail.com |
| 5 | Boyd | Lockman | 23 | Celine62@yahoo.com |
| 6 | Jared | Bernhard-Stehr | 26 | Juliana6@gmail.com |
| 7 | Ebony | Bruen | 18 | Lester91@hotmail.com |
| 8 | Josefina | Morar | 52 | Courtney36@hotmail.com |
| 9 | Marques | Waelchi | 19 | Blanche.Ferry@hotmail.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 | Shane | Ratke | 37 | Jean.Waters@gmail.com |
| 1 | Heather | Walter-Quigley | 57 | Marc.Gutkowski@yahoo.com |
| 2 | Tiara | Macejkovic | 43 | Casey3@hotmail.com |
| 3 | Christ | Leuschke | 58 | Ian.Kuvalis3@gmail.com |
| 4 | Nora | Bailey | 65 | Jay_Schulist@yahoo.com |
| 5 | Lyle | Hilpert | 37 | Alma85@gmail.com |
| 6 | Jerome | Quigley | 44 | Leo86@gmail.com |
| 7 | Manuela | Schaefer | 25 | Janelle79@yahoo.com |
| 8 | Lempi | Torphy | 64 | Joana67@gmail.com |
| 9 | Elisa | Cruickshank | 44 | Micheal43@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 | Tyler | Schneider | 65 | Luke_Lang29@gmail.com |
| 1 | Deanna | Carter-Brown | 42 | Clay_Herman@hotmail.com |
| 2 | Burley | Okuneva | 59 | Perry.Schmitt@yahoo.com |
| 3 | Rowena | Littel | 47 | Catharine42@gmail.com |
| 4 | Lee | Schmitt | 38 | Cydney26@yahoo.com |
| 5 | Fannie | Kutch | 63 | Sophia.Dooley12@yahoo.com |
| 6 | Alexandria | Medhurst | 60 | Benny.McKenzie6@hotmail.com |
| 7 | Hugo | O'Reilly | 33 | Abraham.Frami32@yahoo.com |
| 8 | Marlon | Beier | 28 | Okey_Kessler@hotmail.com |
| 9 | Bryant | Aufderhar | 32 | Lawrence_Jerde63@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
initialFocusableCell={{ colIndex: 1, rowIndex: 0 }}
withScrollArea
/>
)
行のクリックイベントをハンドルする
行のクリックイベントをハンドルする場合は、onRowClickを使用します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Salvador | Oberbrunner-Nicolas | 64 | Stanton_Treutel88@yahoo.com |
| 1 | Gabrielle | Casper | 30 | Alex.Kunde@gmail.com |
| 2 | Jeanette | O'Kon | 23 | Bethany_Ryan@gmail.com |
| 3 | Lynn | Gerlach | 27 | Sara_Nikolaus48@hotmail.com |
| 4 | Natalie | Bechtelar | 23 | Leah.McDermott27@hotmail.com |
| 5 | Gabriella | Cassin | 59 | Julian.Ward@gmail.com |
| 6 | Janet | Bahringer | 35 | Elvira77@hotmail.com |
| 7 | Anastasia | Schamberger | 41 | Stacy_Hudson@yahoo.com |
| 8 | Peyton | Torphy | 43 | Mable10@yahoo.com |
| 9 | Todd | Okuneva | 30 | Dawn85@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 | Dawn | White | 28 | Carrie.Legros55@yahoo.com |
| 1 | Darin | Kshlerin | 52 | Jordan_Schultz46@hotmail.com |
| 2 | Bonnie | Nolan | 42 | Al.Wunsch39@yahoo.com |
| 3 | Kayley | Hartmann | 30 | Ted65@yahoo.com |
| 4 | Ruthie | Beer | 28 | Camylle75@hotmail.com |
| 5 | Luciano | Hamill | 57 | Desiree_Gerhold0@yahoo.com |
| 6 | Genevieve | Krajcik | 36 | Johnny21@yahoo.com |
| 7 | Salvatore | Swaniawski-Hilll | 65 | Quentin38@hotmail.com |
| 8 | Amir | Schimmel | 33 | Bradley_Mosciski26@gmail.com |
| 9 | Tanya | Quigley | 19 | Leslie14@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 | Lois | Kulas | 62 | Nicholaus_Littel74@yahoo.com |
| 1 | Linda | Kohler | 49 | Heloise41@hotmail.com |
| 5 | Phillip | Cronin | 49 | Joany_Harris91@yahoo.com |
| 7 | Kyler | Volkman | 49 | Sierra_Huels74@hotmail.com |
| 9 | Edward | Buckridge | 49 | Molly.Sawayn@gmail.com |
| 6 | Jay | Beatty | 47 | Adrian.Feil@hotmail.com |
| 3 | Eula | Treutel | 43 | Pablo_Cassin@gmail.com |
| 2 | Elsie | Hagenes | 32 | Marty_Lehner@yahoo.com |
| 4 | Julius | Fisher | 29 | Salvador_Gleason56@gmail.com |
| 8 | Sergio | Dibbert | 26 | Todd51@gmail.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 | Amos | Jacobi | 26 | Jonathon.Cormier@hotmail.com |
| 1 | Randal | Olson | 38 | Patience.Walker84@yahoo.com |
| 2 | Rudolph | Schaefer-Swift | 64 | Darien_Cummerata@gmail.com |
| 3 | Name | Mante | 50 | Ulises84@gmail.com |
| 4 | Spencer | Klocko | 23 | Bret_Nienow@gmail.com |
| 5 | Luna | Harris | 45 | Juana.Cummerata@yahoo.com |
| 6 | Tania | Mann | 55 | Roy.Kuhlman@hotmail.com |
| 7 | Elsa | Barton | 61 | Inez82@gmail.com |
| 8 | Darin | Haley | 51 | Georgia69@yahoo.com |
| 9 | Caroline | Cummerata | 62 | Keven7@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table columns={columns} data={data} enableSorting={false} withScrollArea />
)
複数列のソートを無効にする
複数列のソートを無効にする場合は、enableMultiSortをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Hanna | Hane | 49 | Saige.Rippin78@gmail.com |
| 1 | Sarina | Satterfield | 55 | Colin_Robel@gmail.com |
| 2 | Kelsi | Abernathy | 21 | Loma.Franey30@yahoo.com |
| 3 | Dana | Considine | 37 | Andrew.Prosacco88@yahoo.com |
| 4 | Pat | Daniel | 55 | Salvatore_Rempel@hotmail.com |
| 5 | Nancy | Farrell | 34 | Adrian57@gmail.com |
| 6 | Alexander | Carroll | 47 | Thea_Ledner@gmail.com |
| 7 | Boris | Larson | 61 | Dustin.Simonis63@hotmail.com |
| 8 | Becky | Hessel | 34 | Everett_Smith37@yahoo.com |
| 9 | Gerard | Hudson | 44 | Marcelina.Runte@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table columns={columns} data={data} enableMultiSort={false} withScrollArea />
)
最大のソート可能な列数を設定する
最大のソート可能な列数を設定する場合は、maxMultiSortColCountに数値を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Fermin | Luettgen | 61 | Amina27@gmail.com |
| 1 | Kenny | Flatley | 52 | Brody35@hotmail.com |
| 2 | Cory | Rodriguez | 25 | Kody.Gislason@yahoo.com |
| 3 | Michele | Connelly | 18 | Viola31@yahoo.com |
| 4 | Kurtis | O'Kon | 65 | Lindsay.Zulauf36@gmail.com |
| 5 | Maureen | Langosh | 36 | Shaniya.Miller3@gmail.com |
| 6 | Janis | Moore | 62 | Jackie_Bednar@hotmail.com |
| 7 | Malcolm | Schaden | 38 | Katrina.Lebsack4@hotmail.com |
| 8 | Angie | West | 41 | Syble_Beier@gmail.com |
| 9 | Agnes | Hodkiewicz | 57 | Noah_Pagac@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
maxMultiSortColCount={2}
withScrollArea
/>
)
手動のソートを使う
手動のソートを使う場合は、manualSortingをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Garrett | Moore | 59 | Adrian47@gmail.com |
| 1 | Louis | Torphy | 22 | Al95@yahoo.com |
| 2 | Angela | Hackett | 30 | Allison_Hettinger@yahoo.com |
| 3 | Chesley | Gusikowski | 56 | Ahmed_Ratke@yahoo.com |
| 4 | Clark | Wunsch | 22 | Alice_Reichert@hotmail.com |
| 5 | Sarai | Heidenreich | 53 | Omari.Marquardt97@hotmail.com |
| 6 | Glen | Orn | 46 | Pam53@gmail.com |
| 7 | Sam | Jast | 62 | Laurence_Becker11@hotmail.com |
| 8 | Zoey | Sauer | 57 | Suzanne_Lehner@hotmail.com |
| 9 | Kirk | Kutch | 59 | Cristopher83@hotmail.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 | Ally | Lindgren | 30 | Houston_Pagac46@gmail.com |
| 1 | Odessa | Beier | 32 | Bernard.Walter@yahoo.com |
| 2 | Toni | Ryan-Lockman | 61 | Erma_Renner@yahoo.com |
| 3 | Margarete | Block | 48 | Nickolas82@gmail.com |
| 4 | Sara | Blick | 28 | Patricia.Simonis@yahoo.com |
| 5 | Rickey | Schiller | 30 | Colin.Labadie9@hotmail.com |
| 6 | Darlene | Witting | 44 | Elbert_Koch60@yahoo.com |
| 7 | Carlton | Stamm | 49 | Noah_Walsh@hotmail.com |
| 8 | Michele | Miller | 50 | Ansley.Kris@yahoo.com |
| 9 | Sheldon | Rempel | 20 | Norma_Kuhic@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} sortDescFirst withScrollArea />
ソートを制御する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Santiago | Jast | 54 | Jeanne4@gmail.com |
| 1 | Barry | Turcotte | 45 | Erick.Ritchie92@yahoo.com |
| 2 | Tasha | Morissette | 33 | Andre_OHara17@hotmail.com |
| 3 | Krista | Murray | 44 | Arnold.Collins@gmail.com |
| 4 | Carolyn | Blanda | 26 | Marianne74@gmail.com |
| 5 | Jimmy | Gusikowski | 52 | Mauricio_Conn@yahoo.com |
| 6 | Mable | Boehm | 31 | Selena72@yahoo.com |
| 7 | Sherry | Hilpert | 29 | Martina18@hotmail.com |
| 8 | Sierra | Lehner | 37 | Rick_Zulauf@gmail.com |
| 9 | Michelle | Streich | 65 | Yadira.Hartmann3@hotmail.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 | Floyd | Wolf | 27 | Dallas.Williamson@gmail.com |
| 1 | Ronnie | Kemmer | 53 | Paxton.Krajcik53@hotmail.com |
| 2 | Kim | Swift | 40 | Emily60@gmail.com |
| 3 | Audrey | Stracke | 51 | Richard_Dibbert@hotmail.com |
| 4 | Anissa | Donnelly | 29 | Tanya_Zulauf37@gmail.com |
| 5 | Carmen | Schroeder-Franey | 51 | Rudolph70@yahoo.com |
| 6 | Billy | Adams | 42 | Jonathan.Lind@yahoo.com |
| 7 | Geoffrey | Spinka | 64 | Magdalen_Corwin76@gmail.com |
| 8 | Lilliana | Sporer | 29 | Conner.Gulgowski16@hotmail.com |
| 9 | Melisa | Hand | 58 | Darrel_Kassulke14@yahoo.com |
| 10 | Cordia | Gutmann | 58 | Jett47@yahoo.com |
| 11 | Ida | Dietrich | 42 | Gerald11@gmail.com |
| 12 | Lela | Stokes | 27 | Alan.Goyette79@hotmail.com |
| 13 | Karl | Hammes | 19 | Dwayne96@gmail.com |
| 14 | Vidal | Robel | 57 | Joan.Schiller54@yahoo.com |
| 15 | Rosario | Schmidt | 23 | Berry81@gmail.com |
| 16 | Wilbur | Dicki | 55 | Fabiola.Kertzmann-Bernhard@yahoo.com |
| 17 | Gavin | Champlin | 48 | Glen7@hotmail.com |
| 18 | Forrest | Koepp-Leuschke | 38 | Hellen.Grant77@yahoo.com |
| 19 | June | Considine | 32 | Jodi.Gerhold@yahoo.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 | Marion | Koss | 24 | Ladarius15@hotmail.com |
| 11 | Kara | Keebler | 40 | Kara.Bosco8@gmail.com |
| 12 | Alexandria | Bogisich-Reilly | 58 | Katherine16@hotmail.com |
| 13 | Jennie | Schaefer | 41 | Thad.Leuschke@yahoo.com |
| 14 | Santiago | Rosenbaum | 35 | Abraham61@yahoo.com |
| 15 | Dangelo | Welch | 63 | Gertrude_Klocko97@hotmail.com |
| 16 | Traci | Wyman | 58 | Bonnie.Graham97@hotmail.com |
| 17 | Morgan | McClure | 32 | Myra.White67@yahoo.com |
| 18 | Allen | Waters | 35 | Norma22@gmail.com |
| 19 | Victor | West | 33 | Velda_Bartell33@gmail.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 | Betsy | Beahan | 53 | Kaycee.Harris@hotmail.com |
| 1 | Kristine | Ledner | 21 | Margaret.Christiansen@gmail.com |
| 2 | Dorothy | Gleichner | 47 | Deshaun.Streich@gmail.com |
| 3 | Bernadette | Mante | 34 | Agnes.Kreiger76@gmail.com |
| 4 | Andre | Heathcote | 58 | Stacy_Blick@hotmail.com |
| 5 | Claire | Bashirian | 27 | Lewis_Berge58@yahoo.com |
| 6 | Marina | Spinka | 35 | Myrl25@yahoo.com |
| 7 | Stacey | Ward-Dicki | 54 | Barbara.Feest@hotmail.com |
| 8 | Clint | Tromp | 61 | Roosevelt.Hintz@yahoo.com |
| 9 | Donald | Bernhard | 38 | Damian.West@gmail.com |
| 10 | Eva | O'Keefe | 27 | Lester.Wiza@hotmail.com |
| 11 | Arlene | Hilll | 33 | Stacy43@hotmail.com |
| 12 | Bryana | Leannon-Nienow | 45 | Lenny26@gmail.com |
| 13 | Hannah | Klein | 39 | Jack61@yahoo.com |
| 14 | Diane | Leffler | 60 | Cletus.Blick@gmail.com |
| 15 | Hugh | Veum | 56 | Carli89@gmail.com |
| 16 | Isabel | Hahn | 21 | Aurelia_DAmore@yahoo.com |
| 17 | Eliseo | Brown | 64 | Christopher30@gmail.com |
| 18 | Clint | Torp | 20 | Ed69@gmail.com |
| 19 | Ira | Schmidt | 45 | Mikel_Zulauf0@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 | Rafael | Hahn | 20 | Sean.Stroman@gmail.com |
| 1 | Felipe | Swift | 26 | Sophie_Langworth91@yahoo.com |
| 2 | Zoe | Prohaska | 24 | Rene.Stanton49@hotmail.com |
| 3 | Anna | Doyle | 38 | Mariano_Morissette78@hotmail.com |
| 4 | Ellen | Conn | 43 | Dan_Corkery@hotmail.com |
| 5 | Madeline | Boyer | 33 | Kristin.Terry54@hotmail.com |
| 6 | Roger | Tromp | 52 | Anna.Green@yahoo.com |
| 7 | Lawrence | Haag | 45 | Adolf_Cruickshank@yahoo.com |
| 8 | Rufus | Koepp | 22 | Roberto.Barton@gmail.com |
| 9 | Cecelia | Barton | 27 | Dagmar26@hotmail.com |
| 10 | Elmer | Strosin | 31 | Lynette_Miller@yahoo.com |
| 11 | Beatrice | Bins | 64 | Carol_Wunsch@gmail.com |
| 12 | Jolie | Schaden | 54 | Cristina35@hotmail.com |
| 13 | Gust | Kulas | 40 | Aaron7@hotmail.com |
| 14 | Julian | Feest | 54 | Laurence.Grady41@hotmail.com |
| 15 | Tommie | Gibson | 45 | Cedric_Stroman82@hotmail.com |
| 16 | Angel | Howe | 44 | Lacy9@gmail.com |
| 17 | Angelica | Rodriguez | 46 | Jaiden_Collins9@gmail.com |
| 18 | Al | Rosenbaum | 39 | Terrance_Kassulke@yahoo.com |
| 19 | Felicita | Tromp | 51 | Hector_Rogahn14@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 | Newton | Schimmel | 40 | Rosa_Schuster@gmail.com | |
| 1 | Orval | Cruickshank | 59 | Winston_Monahan@yahoo.com | |
| 2 | Harry | Gorczany | 42 | Kyle.Leannon18@hotmail.com | |
| 3 | Bernadine | Larkin | 50 | Emma.Gorczany-Mraz82@yahoo.com | |
| 4 | Isaias | Heathcote | 59 | Roberta.Jast@yahoo.com | |
| 5 | Lola | Stroman | 45 | Derrick_Wolf@gmail.com | |
| 6 | Ernestine | Beatty | 56 | Phillip37@yahoo.com | |
| 7 | Emily | Lynch | 31 | Geo_Mayert95@yahoo.com | |
| 8 | Peter | Bosco | 65 | Lillie_Harber55@gmail.com | |
| 9 | Everette | Aufderhar | 58 | Derick42@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} enableRowSelection withScrollArea />
デフォルトの選択された行を設定する
デフォルトの選択された行を設定する場合は、defaultRowSelectionにdataのインデックスをキーとしたオブジェクトを設定します。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Terrell | Kreiger | 22 | Ora_Miller@gmail.com | |
| 1 | Dwight | Tremblay | 33 | Brent14@gmail.com | |
| 2 | Abel | Hudson | 54 | Sean47@yahoo.com | |
| 3 | Savanna | Mitchell | 26 | Freida.Gottlieb21@yahoo.com | |
| 4 | Ofelia | Olson | 61 | Adan_Abshire@yahoo.com | |
| 5 | Pat | Hamill | 51 | Pat_Wehner20@hotmail.com | |
| 6 | Evan | Torp | 35 | Timmy41@hotmail.com | |
| 7 | Sophia | Hamill | 38 | Lynette.Haag@hotmail.com | |
| 8 | Brisa | Turner | 26 | Earl74@gmail.com | |
| 9 | Cathy | Hagenes | 37 | Rudolph0@yahoo.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 | Stephanie | Bogan | 59 | Patsy.Adams78@hotmail.com | |
| 1 | Lila | Klein | 51 | Josefina.Berge@gmail.com | |
| 2 | Carson | Schuppe | 64 | Theo_Schulist89@yahoo.com | |
| 3 | Albert | Gottlieb | 23 | Erika.Bernhard48@yahoo.com | |
| 4 | Terry | Langworth | 50 | Elvera_Rippin95@yahoo.com | |
| 5 | Emmett | Breitenberg | 35 | Santiago.Schaefer@hotmail.com | |
| 6 | Elyssa | Nikolaus | 58 | Ellis_Jakubowski60@yahoo.com | |
| 7 | Sylvester | Glover | 37 | Annetta38@gmail.com | |
| 8 | Dawn | Rice | 47 | Arno48@gmail.com | |
| 9 | Brandy | Turner | 37 | Freda61@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
selectOnClickRow
withScrollArea
/>
)
チェックボックスを非表示にする
チェックボックスを非表示にする場合は、withCheckboxをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Edward | Torphy | 55 | Henri38@gmail.com |
| 1 | Clarence | Streich | 52 | Jarrett.Hodkiewicz67@yahoo.com |
| 2 | James | Stark | 55 | Dolores_Kilback44@yahoo.com |
| 3 | Brett | Ernser | 37 | Melvin57@hotmail.com |
| 4 | Ignacio | Jenkins | 46 | Ryley.Langosh2@yahoo.com |
| 5 | Curtis | Kunze | 63 | Sean28@yahoo.com |
| 6 | Pat | Koepp | 59 | Eula.Langosh@yahoo.com |
| 7 | Lynette | Shields | 65 | Emie38@gmail.com |
| 8 | Haleigh | Marvin | 34 | Andres_Mills28@hotmail.com |
| 9 | Raven | Macejkovic | 45 | Levi_Ondricka20@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
selectOnClickRow
withCheckbox={false}
withScrollArea
/>
)
行を無効にする
行を無効にする場合は、enableRowSelectionに条件の関数を設定します。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Brett | Wyman | 20 | Jett.Sanford48@gmail.com | |
| 1 | Asa | Erdman | 56 | Jonas_Kunze@yahoo.com | |
| 2 | Ira | Krajcik | 40 | Bryan_Kovacek58@gmail.com | |
| 3 | Armani | Nicolas | 39 | Bruce_Ankunding17@hotmail.com | |
| 4 | Beth | Boyle | 31 | Yvonne.Becker@yahoo.com | |
| 5 | Clinton | Yost | 64 | Damon.Feil@gmail.com | |
| 6 | Kelley | Schaden | 51 | Cary82@gmail.com | |
| 7 | Dianna | Schumm | 26 | Lindsay_Bailey66@yahoo.com | |
| 8 | Anita | Ebert | 43 | Ricky_Pfannerstill@gmail.com | |
| 9 | Kamren | Sanford | 48 | Garry_Thiel42@hotmail.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 | Paulette | Price | 30 | Brionna89@yahoo.com | |
| 1 | Jerry | Jaskolski | 39 | Adrien0@hotmail.com | |
| 2 | Wade | Dickinson-O'Connell | 36 | Louisa78@hotmail.com | |
| 3 | Shelly | Walker | 40 | Joy.McLaughlin@gmail.com | |
| 4 | Carla | Bradtke | 24 | Frances_Rutherford@hotmail.com | |
| 5 | Patti | Schmeler | 52 | Thomas.Blick-Huel26@hotmail.com | |
| 6 | Bridget | Reichert | 34 | Ronnie.Runolfsson30@gmail.com | |
| 7 | Ginger | Blanda | 64 | Darrell63@hotmail.com | |
| 8 | Laverna | Brown | 50 | Jayce.Corwin36@hotmail.com | |
| 9 | Martin | Rempel | 61 | Edgar.Emard@hotmail.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 | Otha | Weber | 48 | Sam_Prohaska83@yahoo.com |
| 1 | Emmett | Sipes | 38 | Jamar23@gmail.com |
| 2 | Oscar | Schumm | 55 | Demetrius.Weissnat16@gmail.com |
| 3 | Ismael | Heaney | 52 | Delilah49@hotmail.com |
| 4 | Darlene | Murphy | 41 | Wilma_Mitchell@hotmail.com |
| 5 | Erin | Cartwright | 30 | Ross.Mosciski44@gmail.com |
| 6 | Wilma | Crooks | 37 | Veronica_Zieme@hotmail.com |
| 7 | Krista | Bergnaum | 59 | Harley_Christiansen@yahoo.com |
| 8 | Freida | Kunze | 49 | Donald.Hettinger95@hotmail.com |
| 9 | Sunny | Klein | 50 | Edith97@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 | |
|---|---|---|---|---|
| 2 | Genesis | Batz | 56 | Garrett.Hoeger68@gmail.com |
| 4 | Drew | Marks | 52 | Bret_McCullough92@gmail.com |
| 5 | Allison | Hoeger | 29 | Marisol.VonRueden@gmail.com |
| 6 | Lynda | Frami | 50 | Ervin_Macejkovic-Casper24@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 | Latoya | Mayer | 41 | Ralph.Beer@yahoo.com |
| 1 | Troy | Smith | 39 | Elias_Kessler32@hotmail.com |
| 2 | Jeannie | Ankunding | 41 | Desiree_OHara32@gmail.com |
| 3 | Elisa | Kuhlman | 64 | Loyal.Robel@hotmail.com |
| 4 | Sara | Marks | 45 | Tamia_Farrell88@gmail.com |
| 5 | Nicholas | Johns | 20 | Bernice62@yahoo.com |
| 6 | Patience | Ryan | 60 | Federico.Crist-McLaughlin@yahoo.com |
| 7 | Ivah | Shanahan | 61 | Florence_Blanda17@yahoo.com |
| 8 | Henriette | Mante | 64 | Helene.Denesik@hotmail.com |
| 9 | Nicholaus | Frami | 53 | Naomie.Effertz-Grady53@hotmail.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 | Shanel | Raynor | 23 | Alexis_Bode14@yahoo.com |
| 1 | Floyd | Champlin | 47 | Gloria.Kuhic@hotmail.com |
| 2 | Glenna | Barton | 51 | Francisco58@yahoo.com |
| 3 | Vesta | Yundt | 56 | Claire59@yahoo.com |
| 4 | Linda | Little | 44 | Melissa2@hotmail.com |
| 5 | Kim | Kirlin | 33 | Calvin_Rohan@hotmail.com |
| 6 | Asa | Rau-Blanda | 25 | Deondre_Schoen@gmail.com |
| 7 | Irvin | Larkin | 65 | Johanna_Willms@gmail.com |
| 8 | Tanya | Howell | 34 | Alvera51@hotmail.com |
| 9 | Ken | Hessel | 46 | Garrett.Brown@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableColumnResizing
withBorder
withColumnBorders
/>
)
列のサイズ変更の方法を変更する
デフォルトでは、列のサイズ変更のタイミングは、ドラッグしている間に変更されます。ドラッグが終わったときに変更する場合は、columnResizeModeに"onEnd"を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Jarrett | Huels | 22 | Osbaldo91@gmail.com |
| 1 | Stacey | Parisian | 60 | Archibald_Buckridge1@hotmail.com |
| 2 | Nadine | Armstrong | 55 | Paige.Deckow@yahoo.com |
| 3 | Estelle | Jast | 37 | Louis3@hotmail.com |
| 4 | Rosalind | D'Amore | 32 | John_Oberbrunner@hotmail.com |
| 5 | Adolf | Miller | 62 | Jacinthe37@yahoo.com |
| 6 | Ben | Block | 51 | Tamia_Durgan@yahoo.com |
| 7 | Jannie | Windler | 35 | Jamie_Schiller36@yahoo.com |
| 8 | Kayla | Kuphal | 53 | Patsy_Mann-Mayer1@hotmail.com |
| 9 | Dillon | Hirthe | 21 | Amy.Jacobson48@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableColumnResizing
columnResizeMode="onEnd"
withBorder
withColumnBorders
/>
)
Props
アクセシビリティ
現在、v2の移行に伴い、このセクションは更新中です。