Saltar al contenido
Logic2BUI

Buscar en la documentación

Busca componentes y documentación

Nuevo
Menú

Tabla de datos

Filtrado, ordenación y paginación compuestos sobre el componente Table.

EmailStatus
mia@example.compending$837
leo@example.comfailed$721
sam@example.comsuccess$452
ken@example.comsuccess$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 useMemo para recalcularlos únicamente cuando cambien sus entradas.
  • Restablece el índice de página a 0 cuando cambie el filtro y limita la página actual al intervalo disponible para evitar una tabla vacía.
  • Con datos de servidor, lleva filter, sort y page a parámetros de la URL y solicita cada página en vez de dividir todos los datos en el cliente.