Table
Tableは、列のソートや行の選択やクリックイベント機能を備えたテーブルのコンポーネントです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Myrl | Lueilwitz | 63 | Edwina_Bins@yahoo.com |
| 1 | Jasper | Schuppe | 48 | Willie.Baumbach@gmail.com |
| 2 | Amely | Roob | 31 | Wilhelm_Pfeffer@yahoo.com |
| 3 | Lucy | Ernser | 52 | Janessa.Tremblay@hotmail.com |
| 4 | Chyna | Huels-Koelpin | 61 | Thaddeus_Funk@gmail.com |
| 5 | Sanford | Stoltenberg | 51 | Ima_Mayer70@yahoo.com |
| 6 | Evans | Heaney | 38 | Vada_Adams@yahoo.com |
| 7 | Cierra | Hermiston | 21 | Danika59@hotmail.com |
| 8 | Franz | Rowe | 36 | Jackie.Medhurst-Feest23@gmail.com |
| 9 | Reagan | Heidenreich | 33 | Lizzie.Hoeger11@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 | Sigurd | Keebler | 35 | Natasha_Morar65@hotmail.com |
| 1 | Giovanna | Pfannerstill | 64 | Diamond99@yahoo.com |
| 2 | Javon | Boyer-Goldner | 27 | Vance.Hermiston40@yahoo.com |
| 3 | Eloy | Stiedemann | 36 | Mariela72@gmail.com |
| 4 | Raquel | Medhurst | 55 | Eriberto_Ratke@yahoo.com |
| 5 | Destiny | Swift | 57 | Laney_Purdy@gmail.com |
| 6 | Cyril | Wintheiser | 62 | Isidro55@yahoo.com |
| 7 | Magnus | Schuppe | 33 | Betsy78@yahoo.com |
| 8 | Fay | MacGyver | 54 | Teresa.Schroeder98@yahoo.com |
| 9 | Bret | Little | 58 | Dorian.Leuschke59@hotmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Sigurd | Keebler | 35 | Natasha_Morar65@hotmail.com |
| 1 | Giovanna | Pfannerstill | 64 | Diamond99@yahoo.com |
| 2 | Javon | Boyer-Goldner | 27 | Vance.Hermiston40@yahoo.com |
| 3 | Eloy | Stiedemann | 36 | Mariela72@gmail.com |
| 4 | Raquel | Medhurst | 55 | Eriberto_Ratke@yahoo.com |
| 5 | Destiny | Swift | 57 | Laney_Purdy@gmail.com |
| 6 | Cyril | Wintheiser | 62 | Isidro55@yahoo.com |
| 7 | Magnus | Schuppe | 33 | Betsy78@yahoo.com |
| 8 | Fay | MacGyver | 54 | Teresa.Schroeder98@yahoo.com |
| 9 | Bret | Little | 58 | Dorian.Leuschke59@hotmail.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 | Leo | Steuber | 30 | Lenny_Olson77@yahoo.com |
| 1 | Kaden | Senger | 19 | Alexandra_Johnson@gmail.com |
| 2 | Giovanny | Waters | 38 | Hilario83@gmail.com |
| 3 | Giovanni | Homenick | 26 | Jayne.Cormier@gmail.com |
| 4 | Arnulfo | Yundt | 32 | Vicenta56@gmail.com |
| 5 | Vivianne | Gusikowski | 24 | Nya_OReilly3@gmail.com |
| 6 | Kailey | Corkery | 28 | Sydnee.Gleason47@hotmail.com |
| 7 | Domenic | Cremin | 18 | Harvey.McDermott89@gmail.com |
| 8 | Roselyn | Kris | 19 | Darrell_OHara-Mueller89@hotmail.com |
| 9 | Mabelle | Barton | 56 | Kaelyn74@gmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Leo | Steuber | 30 | Lenny_Olson77@yahoo.com |
| 1 | Kaden | Senger | 19 | Alexandra_Johnson@gmail.com |
| 2 | Giovanny | Waters | 38 | Hilario83@gmail.com |
| 3 | Giovanni | Homenick | 26 | Jayne.Cormier@gmail.com |
| 4 | Arnulfo | Yundt | 32 | Vicenta56@gmail.com |
| 5 | Vivianne | Gusikowski | 24 | Nya_OReilly3@gmail.com |
| 6 | Kailey | Corkery | 28 | Sydnee.Gleason47@hotmail.com |
| 7 | Domenic | Cremin | 18 | Harvey.McDermott89@gmail.com |
| 8 | Roselyn | Kris | 19 | Darrell_OHara-Mueller89@hotmail.com |
| 9 | Mabelle | Barton | 56 | Kaelyn74@gmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Leo | Steuber | 30 | Lenny_Olson77@yahoo.com |
| 1 | Kaden | Senger | 19 | Alexandra_Johnson@gmail.com |
| 2 | Giovanny | Waters | 38 | Hilario83@gmail.com |
| 3 | Giovanni | Homenick | 26 | Jayne.Cormier@gmail.com |
| 4 | Arnulfo | Yundt | 32 | Vicenta56@gmail.com |
| 5 | Vivianne | Gusikowski | 24 | Nya_OReilly3@gmail.com |
| 6 | Kailey | Corkery | 28 | Sydnee.Gleason47@hotmail.com |
| 7 | Domenic | Cremin | 18 | Harvey.McDermott89@gmail.com |
| 8 | Roselyn | Kris | 19 | Darrell_OHara-Mueller89@hotmail.com |
| 9 | Mabelle | Barton | 56 | Kaelyn74@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 | Kyla | Beahan | 35 | Eunice50@yahoo.com |
| 1 | Clovis | Bruen | 45 | Kyler_Weber@yahoo.com |
| 2 | Monica | Tromp | 18 | Camille_Hickle@gmail.com |
| 3 | Nannie | O'Kon | 65 | Fatima39@gmail.com |
| 4 | Dameon | Trantow | 57 | Tess_Sporer53@hotmail.com |
| 5 | Jaren | Feeney | 60 | Garrison66@hotmail.com |
| 6 | Brianne | Farrell | 28 | Coy_Ullrich21@hotmail.com |
| 7 | Stefanie | Waters | 23 | Danyka60@gmail.com |
| 8 | Patience | Keeling | 30 | Monty_Hayes-Daniel11@hotmail.com |
| 9 | Sylvia | Thiel | 53 | Raul_Roob31@hotmail.com |
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Kyla | Beahan | 35 | Eunice50@yahoo.com |
| 1 | Clovis | Bruen | 45 | Kyler_Weber@yahoo.com |
| 2 | Monica | Tromp | 18 | Camille_Hickle@gmail.com |
| 3 | Nannie | O'Kon | 65 | Fatima39@gmail.com |
| 4 | Dameon | Trantow | 57 | Tess_Sporer53@hotmail.com |
| 5 | Jaren | Feeney | 60 | Garrison66@hotmail.com |
| 6 | Brianne | Farrell | 28 | Coy_Ullrich21@hotmail.com |
| 7 | Stefanie | Waters | 23 | Danyka60@gmail.com |
| 8 | Patience | Keeling | 30 | Monty_Hayes-Daniel11@hotmail.com |
| 9 | Sylvia | Thiel | 53 | Raul_Roob31@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 | Sally | Schamberger | 51 | Luis.Stokes@yahoo.com |
| 1 | Vicente | Howell | 24 | Francesco_McClure@yahoo.com |
| 2 | Alva | Friesen | 19 | Randal90@yahoo.com |
| 3 | Crystal | Kiehn | 26 | Gunner.Leannon@gmail.com |
| 4 | Bobbie | Wisoky | 28 | Pink50@hotmail.com |
| 5 | Jairo | Hagenes | 56 | Edythe52@hotmail.com |
| 6 | Myra | Glover | 53 | Tiara.Ankunding38@hotmail.com |
| 7 | Karen | Herman | 21 | Jasmin_Schaden@hotmail.com |
| 8 | Chelsey | Hodkiewicz | 52 | Blake42@yahoo.com |
| 9 | Jordi | Kub | 24 | Grant.Runolfsson@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} withBorder withScrollArea />
列の区切り線を追加する
列の区切り線を追加する場合は、withColumnBordersをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Bradly | Lakin | 60 | Sydney77@yahoo.com |
| 1 | Francisca | Quitzon | 39 | Elnora83@hotmail.com |
| 2 | Daisha | Olson | 61 | Kaley_Emmerich21@yahoo.com |
| 3 | Lora | Torp | 32 | Cody.Koch0@yahoo.com |
| 4 | Bernie | Krajcik-Romaguera | 54 | Chauncey59@gmail.com |
| 5 | Brennan | Hyatt | 51 | Enoch.Kuphal73@hotmail.com |
| 6 | Iva | Willms | 63 | Nora_Grimes@hotmail.com |
| 7 | Tamara | Tillman | 25 | Damion51@hotmail.com |
| 8 | Bruce | Blanda | 65 | Kamryn_Hane@hotmail.com |
| 9 | Jeanie | Koch | 65 | Saige77@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} withColumnBorders withScrollArea />
行がホバーされたときにハイライトする
行がホバーされたときにハイライトする場合は、highlightOnHoverをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Twila | Buckridge | 37 | Finn_Rogahn@gmail.com |
| 1 | Tamara | Maggio | 50 | Ernest.Murray@gmail.com |
| 2 | Kody | D'Amore | 40 | Hilton99@yahoo.com |
| 3 | Madaline | Pfeffer | 30 | Thelma3@hotmail.com |
| 4 | Kadin | Jerde | 24 | Chaz_Farrell64@gmail.com |
| 5 | Caitlyn | Hodkiewicz | 52 | Mathias26@yahoo.com |
| 6 | Jules | Hodkiewicz | 30 | Olen.Schinner56@yahoo.com |
| 7 | Wanda | McLaughlin | 30 | Jerald.Hilpert27@gmail.com |
| 8 | Floyd | Bins | 19 | Tania.Bradtke62@yahoo.com |
| 9 | Schuyler | Schumm | 37 | Shanna81@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} highlightOnHover withScrollArea />
ストライプを使う
ストライプを使う場合は、stripedをtrueにします。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Marcelino | Zemlak | 42 | Kirsten.Murray@hotmail.com |
| 1 | Myrtice | Kuphal | 26 | Abner58@yahoo.com |
| 2 | Stella | Reichert | 22 | Eric53@yahoo.com |
| 3 | Jennie | Bahringer | 48 | Claude_Bogan@yahoo.com |
| 4 | Margie | Hyatt | 55 | Sydnie_Wisoky@yahoo.com |
| 5 | Jacinto | Gusikowski | 61 | Domenica_Donnelly@gmail.com |
| 6 | Jose | Torp | 31 | Fidel.Runolfsson@yahoo.com |
| 7 | Rachael | Runolfsdottir | 28 | Kenneth_Hermiston@gmail.com |
| 8 | Coralie | Mayer | 37 | Loyce.Dietrich17@hotmail.com |
| 9 | Giovanna | Jakubowski | 48 | Layla33@yahoo.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 | Norris | Jerde | 27 | Violet61@yahoo.com | 1-844-392-1381 | admin | inactive | 10/18/2025 | 6/24/2025 |
| 1 | Adriana | Reichert | 59 | Kasey_Wiza-Russel@yahoo.com | 1-760-535-2624 x645 | user | inactive | 3/2/2025 | 9/16/2025 |
| 2 | Jaron | Stracke | 29 | Hertha5@gmail.com | 1-303-637-2164 x48884 | user | active | 12/4/2025 | 2/15/2025 |
| 3 | Orie | Hilpert | 58 | Theresa_Cartwright@gmail.com | 215.688.2882 x55610 | user | inactive | 12/21/2025 | 3/23/2025 |
| 4 | Catharine | Hilpert | 47 | Leatha_Mueller@yahoo.com | 584-365-2282 x5190 | admin | inactive | 9/8/2025 | 7/27/2025 |
| 5 | Ray | Hyatt | 55 | Jade22@gmail.com | 1-657-227-1409 x3571 | user | active | 5/26/2025 | 9/16/2025 |
| 6 | Connor | Feest | 43 | Kale_Wolff97@yahoo.com | (957) 532-7045 x3818 | user | inactive | 12/18/2025 | 5/2/2025 |
| 7 | Rhoda | McKenzie | 20 | Katherine_Medhurst27@hotmail.com | 246.345.3894 | user | inactive | 4/27/2025 | 8/19/2025 |
| 8 | Dell | Feil | 29 | Georgiana74@hotmail.com | (336) 790-6690 x7026 | admin | active | 8/7/2025 | 1/30/2025 |
| 9 | Brianne | Hettinger | 40 | Loyce_Denesik61@hotmail.com | 342-633-5284 x373 | admin | active | 2/5/2025 | 2/21/2025 |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columnsFull} data={data} withScrollArea />
ヘッダーグループ
| id | user | |||
|---|---|---|---|---|
| name | age | |||
| firstName | lastName | |||
| 0 | Alford | Senger | 64 | Buck51@hotmail.com |
| 1 | Ellis | Kovacek | 58 | Lindsay30@yahoo.com |
| 2 | Tavares | Ernser | 22 | Hellen.Halvorson@hotmail.com |
| 3 | Albert | Goyette | 44 | Tyrique_Effertz-Crona@yahoo.com |
| 4 | Geovanny | Robel | 23 | Trevion.Wyman@yahoo.com |
| 5 | Curt | Luettgen | 18 | Estevan.Mayer@gmail.com |
| 6 | Clotilde | Maggio | 51 | Roxanne_Jones@hotmail.com |
| 7 | Savanna | Mills | 60 | Elyse74@yahoo.com |
| 8 | Jermey | Ankunding | 43 | Keira_Morar56@yahoo.com |
| 9 | Reinhold | Hilll | 62 | Korey.Reynolds6@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 | Danyka | Farrell | 33 | Lura.Schultz55@gmail.com |
| 1 | Willow | Rempel | 47 | Cleo92@hotmail.com |
| 2 | Litzy | Hyatt | 62 | Tatum88@gmail.com |
| 3 | Heaven | Keeling | 58 | Marcella27@hotmail.com |
| 4 | Albertha | Sanford-Hirthe | 56 | Corene_Lesch-Bergstrom@yahoo.com |
| 5 | Gino | Fay | 45 | Ettie.Upton@yahoo.com |
| 6 | John | Frami | 19 | Dandre98@hotmail.com |
| 7 | Keshawn | Waters-Yost | 46 | Candice.Walker@gmail.com |
| 8 | Prudence | Sporer | 44 | Myrtie.Kling96@hotmail.com |
| 9 | Nelda | Runte | 27 | Freddie_Skiles@gmail.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 | Kobe | Lemke | 42 | Joy70@hotmail.com |
| 1 | Moshe | Gerhold | 61 | Braden38@hotmail.com |
| 2 | Carey | Kulas | 56 | Deshaun_Okuneva@gmail.com |
| 3 | Retta | Thompson | 58 | Dorothea_Stoltenberg@hotmail.com |
| 4 | Conner | Schmeler | 41 | Junius_Donnelly90@hotmail.com |
| 5 | Maryjane | Boehm | 42 | Miles_Stroman37@gmail.com |
| 6 | Moses | Wintheiser | 28 | Fredy.Schmeler68@hotmail.com |
| 7 | Myron | Hauck | 18 | Alec_Heidenreich@yahoo.com |
| 8 | Gregoria | Hudson | 64 | Oda_Bahringer14@gmail.com |
| 9 | Laverne | Von | 48 | Warren11@yahoo.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 | Natalia | Bahringer | 19 | Mckenna.Considine@yahoo.com |
| 1 | Kassandra | Marquardt | 32 | Carole_Rosenbaum@gmail.com |
| 2 | Felicity | Wuckert | 34 | Benton.Powlowski@gmail.com |
| 3 | Earline | Boyer | 28 | Sylvester_Hermiston@hotmail.com |
| 4 | Emery | Keebler | 56 | Katelin83@yahoo.com |
| 5 | Agustin | Wintheiser | 64 | Hoyt_Maggio@yahoo.com |
| 6 | Adrien | Bradtke | 35 | Jeanette75@yahoo.com |
| 7 | Edison | Bartell | 53 | Brian8@hotmail.com |
| 8 | Reyna | Howell | 27 | Sunny.Mayert28@hotmail.com |
| 9 | Lucile | Stroman-Yundt | 33 | Susanna.Shanahan@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 | Juliet | Pfeffer | 61 | Eleanore_Barrows48@gmail.com |
| 1 | Emerald | Brekke | 18 | Lyla_Simonis@yahoo.com |
| 2 | Velma | Bartoletti | 37 | Aurelia13@yahoo.com |
| 3 | Pauline | Kuhn | 39 | Virgil55@hotmail.com |
| 4 | Dennis | Murazik-Effertz | 65 | Angie38@gmail.com |
| 5 | Tre | Gleichner | 33 | Bert57@gmail.com |
| 6 | Kaela | Langworth | 52 | Jordan_Bechtelar@hotmail.com |
| 7 | Savannah | Skiles | 46 | Janice3@gmail.com |
| 8 | Bryce | Gerlach | 52 | Jeanette_Metz@yahoo.com |
| 9 | Brandon | Satterfield | 27 | Derick_Block@hotmail.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 | Simeon | Cronin-Schmeler | 51 | Amalia.Kerluke0@hotmail.com |
| 1 | Deborah | Wolf | 53 | Krista.Hand@gmail.com |
| 2 | Billie | Hermiston | 21 | Maude.Luettgen@hotmail.com |
| 3 | Jazmyne | Emard | 18 | Estefania28@yahoo.com |
| 4 | Fannie | Yundt | 43 | Zion86@yahoo.com |
| 5 | Reyes | Wilderman | 53 | Linda39@yahoo.com |
| 6 | Aniyah | Nitzsche | 60 | Webster.Koelpin@hotmail.com |
| 7 | Ryley | Leuschke | 44 | Charley61@gmail.com |
| 8 | Leonardo | Beer | 30 | Jaron_Johnston@hotmail.com |
| 9 | Felix | Cummings | 42 | Cathryn.Mante@yahoo.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 | Efren | Steuber | 65 | Velda_Satterfield@gmail.com |
| 4 | Emily | Prohaska | 60 | Joanny_Torp51@gmail.com |
| 1 | Dawn | Brown | 59 | Burley_Miller43@gmail.com |
| 2 | Richard | Schaden | 48 | Domingo.Bergnaum53@gmail.com |
| 9 | Billy | Roberts | 47 | Rolando28@gmail.com |
| 6 | Chelsey | Von | 46 | Brook72@yahoo.com |
| 8 | Sidney | Tillman | 29 | Breanna.Greenfelder51@yahoo.com |
| 7 | Unique | Daugherty | 26 | Eliza.Crooks@gmail.com |
| 5 | Suzanne | Willms | 23 | Warren_Macejkovic-Sporer14@hotmail.com |
| 3 | Joshua | Crist | 21 | Aryanna44@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 | Rollin | Kuhlman | 27 | Dandre_Lynch45@yahoo.com |
| 1 | Theo | McKenzie | 22 | Jammie_Corwin61@yahoo.com |
| 2 | Desmond | Lang | 59 | Gene_Miller81@yahoo.com |
| 3 | Sabryna | Senger | 35 | Germaine_Bogan62@yahoo.com |
| 4 | Keon | Keeling | 61 | Heloise25@gmail.com |
| 5 | Jaquan | Pacocha | 56 | Johann_Herman@gmail.com |
| 6 | Nina | Konopelski-Dietrich | 60 | Richard_Cummerata33@yahoo.com |
| 7 | Ethelyn | Bailey | 30 | Rocky_Mayer@yahoo.com |
| 8 | Blanche | Grant | 42 | Liana35@yahoo.com |
| 9 | Vada | Lesch | 39 | Alfreda.Grant@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table columns={columns} data={data} enableSorting={false} withScrollArea />
)
複数列のソートを無効にする
複数列のソートを無効にする場合は、enableMultiSortをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Loy | Hansen | 40 | Delores_Oberbrunner43@yahoo.com |
| 1 | Glenda | Little | 45 | Otha.Daniel6@gmail.com |
| 2 | Jake | Predovic | 37 | Garett.Zieme@hotmail.com |
| 3 | Neal | Zulauf-Rodriguez | 50 | Marietta28@yahoo.com |
| 4 | Madyson | Lindgren | 37 | Alejandra_Hettinger@gmail.com |
| 5 | Hilbert | Miller | 40 | Vivien.Davis17@hotmail.com |
| 6 | Cordelia | Homenick | 59 | Sophia_Mann57@gmail.com |
| 7 | Abbigail | McLaughlin | 25 | Lacy.Conn@gmail.com |
| 8 | Alessandra | Feeney | 18 | Pattie_Blanda51@yahoo.com |
| 9 | Wayne | Rutherford | 65 | Wilfred_Emmerich@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table columns={columns} data={data} enableMultiSort={false} withScrollArea />
)
最大のソート可能な列数を設定する
最大のソート可能な列数を設定する場合は、maxMultiSortColCountに数値を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Valentin | Thompson | 18 | Jeff_Hermann64@gmail.com |
| 1 | Cortney | Littel | 39 | Nikko.Gorczany@gmail.com |
| 2 | Christa | Breitenberg | 48 | Scotty_McDermott@yahoo.com |
| 3 | Monty | Nolan | 25 | Dena78@gmail.com |
| 4 | Leopold | Deckow | 25 | Bridget.Lang@yahoo.com |
| 5 | Luella | Kozey | 25 | Odell.Cummerata2@gmail.com |
| 6 | Arnoldo | Hansen | 25 | Kayla.Altenwerth@hotmail.com |
| 7 | Gustave | Schultz | 37 | Fernando.Kessler@yahoo.com |
| 8 | Antonetta | Miller | 53 | Helene_Rippin62@yahoo.com |
| 9 | Lonnie | Langosh | 62 | Cleo_Jacobi@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
maxMultiSortColCount={2}
withScrollArea
/>
)
手動のソートを使う
手動のソートを使う場合は、manualSortingをtrueに設定します。デフォルトは、falseです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Jaeden | Terry | 43 | Edwin.Runolfsson@gmail.com |
| 1 | Yessenia | Moore | 35 | Rocky3@gmail.com |
| 2 | Anne | Langworth | 37 | Kris.Cummings@gmail.com |
| 3 | Lelia | Hills | 51 | Ramiro_Veum@yahoo.com |
| 4 | Maegan | Raynor | 43 | Avis97@yahoo.com |
| 5 | Okey | Jacobson | 51 | Cecilia.Gislason61@hotmail.com |
| 6 | Jessyca | Klocko | 35 | Mariam_Bartell81@yahoo.com |
| 7 | Chaya | Schaefer | 42 | Breana14@gmail.com |
| 8 | Peggie | Schulist | 55 | King81@hotmail.com |
| 9 | Georgianna | Ruecker | 31 | Omari.Altenwerth22@yahoo.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 | Brandyn | Sipes | 31 | Eleanora_Reilly41@hotmail.com |
| 1 | Johnathon | Grant | 49 | Jeffry9@gmail.com |
| 2 | Lexus | Hahn | 57 | Camille.Luettgen52@yahoo.com |
| 3 | Tyler | Senger | 58 | Osborne.Schmidt22@hotmail.com |
| 4 | Victor | Heller | 39 | Sigrid.Schuppe76@yahoo.com |
| 5 | Astrid | Hansen | 48 | Rebekah0@yahoo.com |
| 6 | Brayan | Hermiston | 39 | Abigayle_Spinka6@yahoo.com |
| 7 | Eloisa | Williamson | 65 | Odie17@hotmail.com |
| 8 | Dedrick | Cruickshank | 31 | Kaylin1@hotmail.com |
| 9 | Travon | Fahey | 58 | Vernie.Dickens@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} sortDescFirst withScrollArea />
ソートを制御する
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Juvenal | Hahn | 28 | Shayne63@yahoo.com |
| 1 | Taya | Gorczany | 49 | Shana65@gmail.com |
| 2 | Ottilie | Rogahn | 24 | Josie.Witting@hotmail.com |
| 3 | Serena | Ondricka | 27 | Florence79@gmail.com |
| 4 | Jeromy | Daniel | 22 | Maureen_McLaughlin26@yahoo.com |
| 5 | Dejuan | Cartwright | 25 | Jordi_Grady40@yahoo.com |
| 6 | Sabryna | O'Hara | 59 | Litzy35@gmail.com |
| 7 | Benton | White | 25 | Zachariah33@gmail.com |
| 8 | Darryl | Gerhold | 40 | Pink26@hotmail.com |
| 9 | Kara | Graham | 48 | Bruce.McKenzie75@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 | Miller | Kovacek | 45 | Daryl_Reilly@gmail.com |
| 1 | Braulio | Klein | 52 | Ruthie_Gutmann64@yahoo.com |
| 2 | Ulises | Luettgen | 46 | Aniyah.Grant26@yahoo.com |
| 3 | Ignacio | Ankunding | 64 | Bailey_Price@gmail.com |
| 4 | Georgianna | Homenick | 64 | Dejon.Mertz70@hotmail.com |
| 5 | Briana | Homenick | 53 | Jakob_Tremblay@hotmail.com |
| 6 | Adell | Hartmann | 55 | Marshall.Wilkinson26@gmail.com |
| 7 | Lottie | Dickinson | 39 | Jadon.Dicki62@hotmail.com |
| 8 | Josiah | Schneider | 58 | Eldon99@gmail.com |
| 9 | Cathryn | Hintz-Fisher | 29 | Lela6@yahoo.com |
| 10 | Grayce | Berge | 49 | Keeley39@gmail.com |
| 11 | Alfreda | Cassin | 54 | Kenton.Metz0@hotmail.com |
| 12 | Benedict | Sauer | 62 | Ricardo.Hegmann92@yahoo.com |
| 13 | Erling | Christiansen | 30 | Jacky13@gmail.com |
| 14 | Ozella | Padberg | 56 | Rashawn.OConner@hotmail.com |
| 15 | Petra | Christiansen | 20 | Stephon_Streich@hotmail.com |
| 16 | Trevion | Lowe | 39 | Mara.Stark@hotmail.com |
| 17 | Modesta | Morissette | 32 | Ellie46@yahoo.com |
| 18 | Stan | Daugherty | 23 | Talia.Strosin-Lind40@gmail.com |
| 19 | Bella | Harvey | 41 | Lourdes77@hotmail.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 | Nicole | Ebert | 62 | Caesar_Okuneva@yahoo.com |
| 11 | Hazle | Streich | 36 | Joana27@hotmail.com |
| 12 | Marlon | Rowe | 20 | Louie_Schaefer@yahoo.com |
| 13 | Zelma | Stanton | 44 | Ara8@yahoo.com |
| 14 | Jules | Schoen | 22 | Natasha_Cormier@hotmail.com |
| 15 | Elwin | Breitenberg-Ruecker | 20 | Obie_Prosacco@gmail.com |
| 16 | Alessia | Renner | 55 | Teresa61@yahoo.com |
| 17 | Velda | Heller | 20 | Stewart47@gmail.com |
| 18 | Elisa | Rolfson | 23 | Ellen_Hand94@gmail.com |
| 19 | Carolina | Tremblay | 36 | Alfred_Leannon20@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 | Annalise | O'Keefe | 56 | Xavier_Boyle-Pouros@hotmail.com |
| 1 | Marshall | Mosciski | 48 | Lila.Mueller-Stamm@hotmail.com |
| 2 | Joanny | Denesik | 22 | Mckayla_Leffler@hotmail.com |
| 3 | Virginia | Swaniawski | 28 | Kiley_Gusikowski@hotmail.com |
| 4 | Prince | O'Keefe | 47 | Rory51@yahoo.com |
| 5 | Maria | Barrows | 55 | Rozella46@yahoo.com |
| 6 | Hertha | Sanford | 26 | Lenora.Kunde-Schmidt4@yahoo.com |
| 7 | Lenora | Feest | 52 | Rosalyn.Hansen@hotmail.com |
| 8 | Jerad | Macejkovic | 47 | Franz4@gmail.com |
| 9 | Ervin | Rath | 33 | Avery_Huels-Gleichner56@hotmail.com |
| 10 | Green | Jakubowski | 31 | Doug50@gmail.com |
| 11 | Brant | Willms | 18 | Lorine_Nader26@gmail.com |
| 12 | Dakota | Lubowitz | 47 | Marcelino_Bogan89@yahoo.com |
| 13 | Keaton | Koch | 54 | Kailee92@gmail.com |
| 14 | Ahmad | Herzog | 25 | Lisa.Jacobi4@gmail.com |
| 15 | Rosemary | Crist | 23 | Briana_Collier46@gmail.com |
| 16 | Nedra | Cummerata-Rogahn | 44 | Cassandra80@gmail.com |
| 17 | Kurtis | Steuber | 40 | Diego32@gmail.com |
| 18 | Julio | Roberts | 60 | Dorris76@hotmail.com |
| 19 | Moses | Rolfson | 60 | Heaven49@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 | Delaney | Reinger | 33 | Kayley.Schimmel@hotmail.com |
| 1 | Rafael | Kirlin | 50 | Celia_Boyer@gmail.com |
| 2 | Myrtice | Walsh | 65 | Clotilde_Gerlach97@gmail.com |
| 3 | Ebony | Greenfelder | 45 | Fannie.Doyle@yahoo.com |
| 4 | Marty | Kunze | 23 | Jett_Davis51@hotmail.com |
| 5 | Bridget | Bednar | 54 | Sylvan_Ratke@yahoo.com |
| 6 | Florida | Wisoky | 50 | Florida_Schmeler8@yahoo.com |
| 7 | Jan | Franecki | 50 | Stan.Heathcote@gmail.com |
| 8 | Elsa | Quitzon-Monahan | 46 | Brendan.Borer7@yahoo.com |
| 9 | Theresa | Wilderman | 27 | Evalyn.Runolfsson@yahoo.com |
| 10 | Valerie | Muller | 57 | Amelia_Rice49@yahoo.com |
| 11 | Zackary | Corwin | 42 | Kody_Bernhard33@yahoo.com |
| 12 | Yolanda | Steuber | 45 | Webster_Mitchell@hotmail.com |
| 13 | Elna | Harvey | 32 | Jayda18@yahoo.com |
| 14 | Mose | Koch | 29 | Gabrielle.Borer@gmail.com |
| 15 | Lilliana | Kerluke | 65 | Ettie.Johnston@yahoo.com |
| 16 | Claudine | Haley | 65 | Xzavier44@hotmail.com |
| 17 | Tyshawn | Cruickshank | 59 | Estefania_Deckow@gmail.com |
| 18 | Theodora | VonRueden | 54 | Bernadine.Prosacco12@gmail.com |
| 19 | Rhett | Bednar | 36 | Mac_Lebsack30@hotmail.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 | Glenna | O'Keefe | 34 | Rosamond.Pfannerstill@hotmail.com | |
| 1 | Merritt | Emmerich | 39 | Celestine_DuBuque@yahoo.com | |
| 2 | Lon | Flatley | 22 | Caroline_Hirthe@gmail.com | |
| 3 | Alexandria | Corwin | 53 | Morris_Mosciski10@gmail.com | |
| 4 | Jayme | Parisian-Batz | 38 | Bettie48@gmail.com | |
| 5 | Cathy | Bogisich | 41 | Desiree.Kassulke63@yahoo.com | |
| 6 | Jazlyn | Schuster | 33 | Jamarcus50@hotmail.com | |
| 7 | Alice | Larkin | 27 | Nikolas_Huels18@yahoo.com | |
| 8 | Roslyn | Rempel | 58 | Francisco64@hotmail.com | |
| 9 | Felton | Feest | 55 | Cassidy_Mills49@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return <Table columns={columns} data={data} enableRowSelection withScrollArea />
デフォルトの選択された行を設定する
デフォルトの選択された行を設定する場合は、defaultRowSelectionにdataのインデックスをキーとしたオブジェクトを設定します。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Jaylen | Johns | 53 | Jefferey.Adams85@yahoo.com | |
| 1 | Elmo | Hickle | 27 | Raina_Wintheiser@hotmail.com | |
| 2 | Wilton | Wilderman | 52 | Donnell37@yahoo.com | |
| 3 | Rylee | Wehner | 60 | Gabe.Jakubowski0@hotmail.com | |
| 4 | Sonia | O'Reilly | 60 | Aubree.Beier-Will95@gmail.com | |
| 5 | Porter | Kunze | 27 | Wilmer_Tromp9@yahoo.com | |
| 6 | Aida | Bergstrom | 35 | Philip_Schaden@yahoo.com | |
| 7 | Richard | Dicki | 56 | Estevan70@yahoo.com | |
| 8 | Albin | Cronin | 50 | Hannah90@yahoo.com | |
| 9 | Cordell | Franey | 28 | Krystina98@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 | Turner | Walter | 57 | Hermann.Kertzmann@yahoo.com | |
| 1 | Brady | Ziemann | 47 | Shanel29@hotmail.com | |
| 2 | Ozella | Ernser | 18 | Eloy.Raynor33@yahoo.com | |
| 3 | Madisen | Wiza | 25 | Savanah.Walker@hotmail.com | |
| 4 | King | Schoen | 57 | Lisette32@gmail.com | |
| 5 | Evie | Abbott | 46 | Zechariah11@yahoo.com | |
| 6 | Amelie | Aufderhar | 41 | Mckayla13@hotmail.com | |
| 7 | Freddy | Kovacek | 64 | Elijah_Corwin-Doyle@hotmail.com | |
| 8 | Lazaro | Borer | 31 | Tomas99@yahoo.com | |
| 9 | Joshuah | Kuhic | 33 | Drew.Lebsack@gmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
selectOnClickRow
withScrollArea
/>
)
チェックボックスを非表示にする
チェックボックスを非表示にする場合は、withCheckboxをfalseに設定します。デフォルトは、trueです。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Rebekah | Pagac | 24 | Briana35@gmail.com |
| 1 | Jaime | Crona | 30 | Gus18@gmail.com |
| 2 | Otho | Crist | 43 | Bo.Dibbert@gmail.com |
| 3 | Norene | Gottlieb | 20 | Naomie96@hotmail.com |
| 4 | Chance | Stoltenberg | 58 | Petra_Crooks@yahoo.com |
| 5 | Willow | Brakus | 21 | Conner5@yahoo.com |
| 6 | Lora | Reichert | 42 | Davin70@hotmail.com |
| 7 | Era | Hermann | 24 | Conner_Nolan@yahoo.com |
| 8 | Iliana | Christiansen | 19 | Dejuan.VonRueden@gmail.com |
| 9 | Nickolas | Ondricka | 46 | Francisca_Maggio@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableRowSelection
selectOnClickRow
withCheckbox={false}
withScrollArea
/>
)
行を無効にする
行を無効にする場合は、enableRowSelectionに条件の関数を設定します。
| id | firstName | lastName | age | ||
|---|---|---|---|---|---|
| 0 | Kaylin | Baumbach | 62 | Elaina.Satterfield21@yahoo.com | |
| 1 | Laney | Treutel | 41 | Fabiola56@hotmail.com | |
| 2 | Reagan | Ondricka | 40 | Kianna.Runolfsdottir84@hotmail.com | |
| 3 | Caleigh | Bednar | 64 | Georgiana15@gmail.com | |
| 4 | Stephanie | Abbott | 38 | Ayden.Mraz@gmail.com | |
| 5 | Nestor | Flatley | 56 | Barney.Hoppe15@gmail.com | |
| 6 | Allan | Davis | 18 | Linnea_OKon@gmail.com | |
| 7 | Jerad | Ullrich | 63 | Mary99@yahoo.com | |
| 8 | Felipa | Pagac | 32 | Antoinette_Lebsack@hotmail.com | |
| 9 | Mariah | Treutel | 23 | Isadore_Waelchi@gmail.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 | Melba | Doyle | 26 | Lamont97@gmail.com | |
| 1 | Lacy | Gleason | 24 | Kariane.Hartmann@yahoo.com | |
| 2 | Jazmin | Ruecker | 58 | Fidel_Borer37@hotmail.com | |
| 3 | Zander | Schuster | 27 | Johnpaul79@hotmail.com | |
| 4 | Annamae | Reinger | 35 | Lenna.Heathcote@hotmail.com | |
| 5 | Kayli | Jast | 49 | Jamie_Cronin@yahoo.com | |
| 6 | Bobbie | Brown | 61 | Dayna_Hahn-Rice@gmail.com | |
| 7 | Bryon | Orn | 18 | Daniela5@hotmail.com | |
| 8 | Marjory | Upton | 40 | Lizzie22@hotmail.com | |
| 9 | Esta | Hauck | 53 | Keeley73@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 | Eileen | Goodwin | 50 | Erna17@yahoo.com |
| 1 | Rachelle | Hayes | 60 | Carrie_Pagac44@hotmail.com |
| 2 | Kendrick | Kilback | 56 | Zechariah_Rogahn54@gmail.com |
| 3 | Dandre | Collier-Herzog | 57 | Clotilde.Waters@yahoo.com |
| 4 | Ed | Boehm | 57 | Justine55@yahoo.com |
| 5 | Prudence | Murazik | 26 | Deonte.DuBuque@yahoo.com |
| 6 | Kane | Torphy | 53 | Fay_Baumbach@yahoo.com |
| 7 | Russ | Braun | 20 | Buford_Cruickshank@yahoo.com |
| 8 | Nola | Nikolaus | 49 | Stone.Swift@gmail.com |
| 9 | Adelbert | McClure | 47 | Lillian.Prohaska@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 | |
|---|---|---|---|---|
| 0 | Devin | Weber | 56 | Ethelyn.Feil@gmail.com |
| 1 | Thora | Pollich | 38 | Justice33@gmail.com |
| 3 | Jaron | Christiansen | 27 | Gillian60@gmail.com |
| 9 | Roberta | Johns | 34 | Lois.Kovacek@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 | Jovanny | Rath | 41 | Travon.Prosacco@hotmail.com |
| 1 | Eloisa | Shanahan | 54 | Krystal_Lemke18@gmail.com |
| 2 | Addison | Howell | 21 | Jillian_Wolf74@hotmail.com |
| 3 | Henri | Kihn | 54 | Declan99@yahoo.com |
| 4 | Walter | Walsh | 64 | Abdullah.Funk-Beahan@yahoo.com |
| 5 | Jazmyn | Aufderhar | 40 | Dejah.Hansen@gmail.com |
| 6 | Kirstin | Cole | 46 | Maye_Brekke35@gmail.com |
| 7 | Annabelle | Pouros | 27 | Kailee.Kilback@gmail.com |
| 8 | Enoch | Hammes | 54 | Aisha.Ankunding44@gmail.com |
| 9 | Lowell | Murray | 47 | Ignatius_Wolff32@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 | Hans | Hettinger-VonRueden | 61 | Opal_Braun62@yahoo.com |
| 1 | Conner | Herman | 59 | Ricardo_White50@gmail.com |
| 2 | Verdie | Herzog | 53 | Kody_Bauch71@gmail.com |
| 3 | Lance | Spencer-Corkery | 35 | Celia.Conroy@gmail.com |
| 4 | Kenny | Bahringer | 61 | Roy87@gmail.com |
| 5 | Tiara | Mann | 28 | Eliseo_McCullough36@hotmail.com |
| 6 | Noemie | Cruickshank | 27 | Ansel62@yahoo.com |
| 7 | Shyann | Herman | 51 | Laney74@yahoo.com |
| 8 | Esteban | Waelchi-Durgan | 64 | Kale_Sawayn@gmail.com |
| 9 | Sam | Bednar | 45 | Darrel7@hotmail.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableColumnResizing
withBorder
withColumnBorders
/>
)
列のサイズ変更の方法を変更する
デフォルトでは、列のサイズ変更のタイミングは、ドラッグしている間に変更されます。ドラッグが終わったときに変更する場合は、columnResizeModeに"onEnd"を設定します。
| id | firstName | lastName | age | |
|---|---|---|---|---|
| 0 | Rene | Skiles | 52 | Rudolph20@yahoo.com |
| 1 | Torey | Glover | 25 | Godfrey50@yahoo.com |
| 2 | Kareem | Kshlerin | 30 | Zack65@hotmail.com |
| 3 | Henri | Hyatt | 65 | Bart.DuBuque75@yahoo.com |
| 4 | Berta | Koelpin | 23 | Flavie_Kuphal75@yahoo.com |
| 5 | Lawrence | Lind | 59 | Brycen.Abernathy1@hotmail.com |
| 6 | Khalil | Deckow | 30 | Chester21@yahoo.com |
| 7 | Hadley | Treutel | 65 | Kristofer.Witting@yahoo.com |
| 8 | Carley | Mohr | 53 | Iva.Rippin@yahoo.com |
| 9 | Karli | Ernser | 34 | Roscoe_Hoppe@yahoo.com |
const data = useMemo<Data[]>(() => createData(), [])
return (
<Table
columns={columns}
data={data}
enableColumnResizing
columnResizeMode="onEnd"
withBorder
withColumnBorders
/>
)
Props
アクセシビリティ
現在、v2の移行に伴い、このセクションは更新中です。