Table、List 與圖表

以可排序的 Table 和不會使版面配置位移的圖表,取代手寫的資料列。

本章的應用程式正在你的主控台執行。按 ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C 開啟主控台(先啟用開發者功能),然後試用。
觀看本章3:05

本章內容

  • 可排序的表格
  • 在表格上方加入圖表
  • 更多元件

用元件取代手工編寫的資料列:支援鍵盤導覽與排序的 <Table>、支援虛擬化捲動的 <List>,以及用八分之一區塊和象限點繪製的圖表。

可排序的表格

欄位定義是由物件組成的陣列。未設定 width 的欄位依 grow 分配剩餘空間,value 是排序時比較的值,render 則負責繪製儲存格。

app/deployments/page.tsx+10-1tsx
新增:import { Table, type SortState, type TableColumn } from "@textjs/app";新增:新增:const COLUMNS: TableColumn<Deployment>[] = [新增:  { key: "status", header: "Status", width: 11, render: (d) => <Status status={d.status} /> },新增:  { key: "commit", header: "Commit", grow: 2 },新增:  { key: "project", header: "Project", width: 10 },新增:  { key: "duration", header: "Build", width: 6, align: "right", value: (d) => d.duration, render: (d) => <Text>{`${d.duration}s`}</Text> },新增:];export default function DeploymentsPage() {新增:  const [sort, setSort] = useState<SortState | null>(null);  …移除:  return rows.map((d) => …);新增:  return <Table columns={COLUMNS} rows={rows} getRowKey={(d) => d.id} sortable sort={sort} onSortChange={setSort} autoFocus />;}

焦點在表格上時,↑ ↓ 移動反白位置,s 循環切換排序欄位,S 反轉排序方向,Enter 呼叫 onSelect。長表格只繪製可見的資料列。

在表格上方加入圖表

<Sparkline> 用最近的資料點填滿區塊。<BarChart> 會對齊標籤與數值。

app/deployments/page.tsx+15tsx
新增:import { BarChart, Sparkline } from "@textjs/app";新增:新增:  const [chart, setChart] = useState<"spark" | "bars">("spark");新增:  useInput((e) => {新增:    if (e.input === "c") setChart((c) => (c === "spark" ? "bars" : "spark"));新增:  });新增:  return (    <Box className="flex-col grow gap-1">新增:      <Box className="flex-col" height={4}>新增:        <Text color="subtle">Build time, last 24 deployments</Text>新增:        {chart === "spark" ? (新增:          <Sparkline data={buildTimes} height={3} color="accent" />新增:        ) : (新增:          <BarChart data={byProject} formatValue={(v) => `${v}s`} />新增:        )}新增:      </Box>      <Table … />    </Box>  );

圖表區塊的高度固定,因此切換圖表不會移動表格,也不會重新編碼表格的資料列。

更多元件

<List>、<Tree>、<Tabs>、<Select>、<Input>、<Modal>、<Toaster>、<CommandPalette>、<ProgressBar>、<LineChart> 等元件的說明收錄在元件文件中。

試用

這是本章結束時的 Acme Deploys,正在 DevTools 中執行。點擊操作區,再使用下方按鍵。

▼ 07 · Table、List 與圖表

開啟主控台

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

應用程式在 DevTools 中渲染。先在 Safari「設定」→「進階」中開啟「顯示網頁開發者功能」。 接著點擊這裡並按 s。

在電腦上開啟

此應用程式在 DevTools 主控台中渲染,需要桌面版瀏覽器。

測驗

2 個問題

回答所有問題以完成本章。

焦點在可排序的 Table 上時,s 有什麼作用?

 

為什麼要固定圖表區塊的高度?