データコンポーネント

<List>、<Table>、<Tree>。仮想化、並べ替え、選択に対応。

<List>、<Table>、<Tree> は大規模なデータセットを表示します。表示範囲内の行のみをレンダリングします。

ライブ72×13 · booting Turbolog…tsx
preview://table:1
<Table  columns={[    { key: "name", header: "Service" },    { key: "region", header: "Region", width: 8 },    { key: "p95", header: "p95", width: 7, align: "right" },  ]}  rows={services}  sortable  selectionMode="multiple"  onSelect={(s) => router.push(`/services/${s.name}`)}/>

<List>、<Table>、<Tree> は共通のキーボード操作を使います。

キー操作
↑ ↓ / j k移動
PgUp PgDn, Ctrl+U Ctrl+D1ページ移動、半ページ移動
Home End / g G先頭、末尾
↵onSelect
ホイールカーソルの移動

デフォルトでは親要素いっぱいに広がります。行数を固定するには height を渡します。

<List>

仮想化されたリストです。各行の高さは1セルです。

<List  items={requests}  getLabel={(r) => `${r.method} ${r.path}`}  onSelect={open}/>
プロパティ説明
items任意の配列
renderItem(item, { highlighted, focused }) => ReactNode
isItemDisabledカーソルがスキップする項目
height表示行数(デフォルト:親要素いっぱい)
highlightedIndex / onHighlight制御されたカーソル
vimKeysj k g G(デフォルト:true)

<Table>

width が設定されていない列は、残りの幅を分け合います。ヘッダーとセルには同じflexルールが適用されるため、常に位置が揃います。

列のフィールド説明
keyIDとデフォルトのアクセサー
width / grow固定セル数、または残りの幅の配分比率
alignleft right center
value表示とソートに使う値
renderカスタムのセル内容
compareカスタムのソート処理

ソート

sortable を指定すると、列番号を押してその列でソート(再度押すと方向を反転)、s で列を順に切り替え、S で方向を反転できます。ソートは安定ソートです。sort と onSortChange で制御します。

選択

selectionMode="multiple" はチェック列を追加し、Space でハイライトされた行の選択を切り替えます。選択の制御には selectedKeys と onSelectionChange を、安定したキーには getRowKey を使います。

<Tree>

ガイド線付きの展開可能なツリーです。

ライブ56×11 · booting Turbolog…tsx
preview://tree:1
<Tree  data={[{ id: "app", label: "app", children: [{ id: "page", label: "page.tsx", hint: "2.8 kB" }] }]}  defaultExpanded={["app"]}  onSelect={(node) => open(node.id)}/>

→ で枝を展開するか、枝の中へ移動します。← で折りたたむか、親へ移動します。Space で展開と折りたたみを切り替えます。独自のレンダラーが必要な場合は、flattenTree(data, expanded) で表示範囲内の行を取得できます。

GitHubでこのページを編集