⁦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 چه می‌کند؟

 

چرا ارتفاع کادر نمودار ثابت باشد؟