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.
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).sortFieldysortOrder: Columna y dirección (1para ascendente,-1para descendente).isLoading: Para mostrar el estado visual esqueleto dePxDataTable.
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:
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 consortable: 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).