Компоненты данных

<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+DНа страницу, на полстраницы
Home End / g GВ начало, в конец
↵onSelect
Колесо мышиПеремещение курсора

По умолчанию они заполняют родительский компонент. Передайте height, чтобы задать фиксированное число строк.

<List>

Виртуализированный список. Высота строки составляет одну ячейку.

<List  items={requests}  getLabel={(r) => `${r.method} ${r.path}`}  onSelect={open}/>
PropОписание
itemsЛюбой массив
renderItem(item, { highlighted, focused }) => ReactNode
isItemDisabledПропуск элемента курсором
heightВидимые строки (по умолчанию: заполнение)
highlightedIndex / onHighlightУправляемый курсор
vimKeysj k g G (по умолчанию true)

<Table>

Столбцы делят оставшуюся ширину, если для них не задано width. Заголовки и ячейки используют одинаковые правила flex, поэтому всегда выровнены.

Поле столбцаОписание
keyИдентификатор и ключ доступа по умолчанию
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