Explica cómo construir navegación y formularios sobre HTML funcional, añadiendo prefetch, pending, optimismo, scroll y recuperación sin perder intención.
Última actualización
Actualizada
Nivel
Aplicación
Progressive enhancement parte de una experiencia HTML funcional y añade navegación cliente, pending, optimismo y prefetch sin convertir esas mejoras en requisitos para comprender o recuperar una operación. En Next.js, la UX resiliente aparece cuando URL, forms, streaming y errores conservan intención incluso con JavaScript lento o red inestable.
HTML semantics and server response
↓
client hydration and navigation
↓
pending feedback
↓
optimistic enhancement when safe
↓
confirmed server result or recovery
No toda feature necesita funcionar sin JavaScript, pero empezar desde primitivas nativas reduce estados frágiles.
Link prefetchea rutas cuando entran al viewport según tipo de ruta/configuración. Esto puede descargar loading states, RSC payload y chunks antes del click.
Next router integra transitions, pero para un link individual puedes usar useLinkStatus bajo APIs actuales o un wrapper que lea pending según la versión. Antes de depender de APIs recientes, confirma estabilidad.
Patrón genérico:
Cambia estilo del link activo/pending.
Mantén el texto.
No deshabilites toda la navbar.
Comunica aria-current para ruta actual.
No muestres “Cargando” en todos los links por prefetch.
Funciona sin JS y genera URL compartible. Un Client Component puede aplicar debounce y router.replace, pero conserva submit explícito para accesibilidad/resiliencia cuando sea útil.
Browser beforeunload es limitado y muestra texto controlado por el navegador. Úsalo solo cuando perder datos es posible.
Para navegación cliente, un patrón de confirmación requiere integración cuidadosa; no existe una API universal estable que intercepte toda transición del App Router como en routers clásicos.
Mejoras:
Autosave con debounce y status.
Draft persistido.
Formularios pequeños.
Explicit save/cancel.
No muestres confirmación por cualquier cambio cosmético.
No deshabilites un botón solo porque el form está inválido sin explicar por qué; puede ser difícil descubrir requisitos. Permitir submit y mostrar errores suele ser más accesible.
Next.js/React pueden ofrecer integraciones experimentales o recientes con View Transitions según versión. No dependas de una API experimental como requisito de navegación. CSS/Framer Motion pueden animar regiones, pero: