Skip to content
Star

Data Table Remota: Paginación, Ordenamiento y Búsqueda Debounced

En aplicaciones empresariales con miles o millones de registros, cargar todo el conjunto de datos en el navegador del cliente es inviable. Esta receta demuestra la arquitectura recomendada para implementar paginación server-side, ordenamiento remoto y búsqueda en tiempo real con debounce utilizando PxDataTable.


Demostración Interactiva

Interactúa con la tabla a continuación. Los datos se consultan con un retardo simulado de 400ms mostrando el estado de carga (loading), conservando los parámetros de consulta y recalculando el total de páginas dinámicamente.

Tabla Remota con Búsqueda y Paginación Asíncrona
Registros filtrados: 12
Usuario
Rol / Puesto
Departamento
Estado
Ventas ($)

No data available


Paso a Paso: Implementación

1. Definición del Contrato de Estado

Para sincronizar la vista con el servidor, mantén variables reactivas dedicadas:

  • currentPage: Página activa (1-indexed).
  • pageSize: Cantidad de filas por página (10, 25, 50).
  • sortField y sortOrder: Columna y dirección (1 para ascendente, -1 para descendente).
  • isLoading: Para mostrar el estado visual esqueleto de PxDataTable.

2. Evitar peticiones redundantes con Debounce

Al escribir en el campo de búsqueda, nunca dispares una solicitud HTTP por cada tecla pulsada. Utiliza un temporizador o useDebounceFn de @vueuse/core con un retraso estándar de 300ms:

ts
import { useDebounceFn } from '@vueuse/core'

const debouncedSearch = useDebounceFn((term: string) => {
  searchQuery.value = term
  currentPage.value = 1 // Reinicia a la primera página tras filtrar
  loadData()
}, 300)

3. Escuchar los Eventos @page y @sort

PxDataTable emite eventos limpios con el nuevo payload cada vez que el usuario interactúa:

  • @page="{ page, rows }": Cuando cambia de página o altera el selector de filas.
  • @sort="{ field, order }": Al pulsar sobre cualquier cabecera con sortable: true.

Cancelación de Solicitudes Anteriores (AbortController)

Si el usuario escribe rápidamente o cambia de página varias veces seguidas, es una buena práctica utilizar AbortController para abortar cualquier petición en vuelo y evitar condiciones de carrera (race conditions).

Built with VitePress