| Status | ||
|---|---|---|
| mia@example.com | pending | $837 |
| leo@example.com | failed | $721 |
| sam@example.com | success | $452 |
| ken@example.com | success | $316 |
Page 1 of 2
Una tabla de datos no es un único componente: es un patrón que se compone con tabla, campo de entrada y botón, controlado por el estado de tu aplicación. El ejemplo es autocontenido y no usa una librería de tablas: incluye filtro de texto, una columna de importe ordenable y paginación en el cliente en unas 40 líneas de React.
Para conjuntos grandes o modelos de columnas complejos, conecta el mismo markup a TanStack Table. Las primitivas Table de logic2b son suficientemente neutras para integrarse directamente.
Instalación
npx logic2b@next add table input button badge
Estructura
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
export function DataTable() {
const [filter, setFilter] = React.useState("")
const [asc, setAsc] = React.useState(false)
const [page, setPage] = React.useState(0)
const rows = React.useMemo(() => {
const filtered = data.filter((d) => d.email.includes(filter))
return [...filtered].sort((a, b) => (asc ? a.amount - b.amount : b.amount - a.amount))
}, [filter, asc])
// Divide `rows` por página y renderiza <Table>…
}
Piezas
| Pieza | Componente | Responsabilidad |
|---|---|---|
| Filtro de la barra | Input |
Texto controlado que reduce el conjunto de filas. |
| Cabecera ordenable | Button variant="ghost" dentro de TableHead |
Alterna la dirección de ordenación. |
| Filas | Table / TableRow / TableCell |
Renderizan la página actual. |
| Celda de estado | Badge |
Asocia un valor a una variante (secondary/destructive/outline). |
| Paginador | Button variant="outline" |
Anterior y siguiente con los extremos desactivados. |
Notas
- Mantén la ordenación y el filtrado dentro de
useMemopara recalcularlos únicamente cuando cambien sus entradas. - Restablece el índice de página a
0cuando cambie el filtro y limita la página actual al intervalo disponible para evitar una tabla vacía. - Con datos de servidor, lleva
filter,sortypagea parámetros de la URL y solicita cada página en vez de dividir todos los datos en el cliente.