Componentes de datos

<List>, <Table> y <Tree>: virtualizados, ordenables y seleccionables.

<List>, <Table> y <Tree> muestran grandes conjuntos de datos. Solo se renderizan las filas visibles.

En vivo72×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> y <Tree> comparten un modelo de navegación por teclado.

TeclasAcción
↑ ↓ / j kDesplazarse
PgUp PgDn, Ctrl+U Ctrl+DAvanzar o retroceder una página, media página
Home End / g GIr al principio, al final
↵onSelect
RuedaMover el cursor

Por defecto, ocupan todo el espacio de su contenedor padre. Pasa height para fijar el número de filas.

<List>

Una lista virtualizada. Las filas tienen una altura de una celda.

<List  items={requests}  getLabel={(r) => `${r.method} ${r.path}`}  onSelect={open}/>
PropDescripción
itemsCualquier array
renderItem(item, { highlighted, focused }) => ReactNode
isItemDisabledElemento omitido por el cursor
heightFilas visibles (por defecto: ocupar todo el espacio)
highlightedIndex / onHighlightCursor controlado
vimKeysj k g G (por defecto true)

<Table>

Las columnas se reparten el ancho restante salvo que definan width. Los encabezados y las celdas usan las mismas reglas flex, por lo que siempre quedan alineados.

Campo de columnaDescripción
keyIdentificador y función de acceso por defecto
width / growNúmero fijo de celdas o proporción del espacio restante
alignleft right center
valueValor para mostrar y ordenar
renderContenido personalizado de la celda
compareOrdenación personalizada

Ordenación

Con sortable, pulsa el número de una columna para ordenar por ella (otra vez para invertir el orden), s para recorrer las columnas y S para invertir la dirección. La ordenación es estable. Contrólala con sort y onSortChange.

Selección

selectionMode="multiple" añade una columna de casillas de selección; Space alterna la selección de la fila resaltada. Usa selectedKeys y onSelectionChange para controlarla, y getRowKey para obtener claves estables.

<Tree>

Un árbol expandible con guías.

En vivo56×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)}/>

→ expande una rama o entra en ella. ← contrae una rama o salta al nodo padre. Space alterna entre expandir y contraer. flattenTree(data, expanded) expone las filas visibles si necesitas tu propio renderizador.

Editar esta página en GitHub