Loading, error y not-found: UX profesional
Estados de UI: loading, error y not-found
Una aplicación real nunca está siempre en su estado "feliz": hay esperas, fallos de red y URLs que no existen. El App Router te da archivos especiales para cubrir cada caso sin tener que cablear manualmente la lógica. Cada uno se coloca dentro de la carpeta de la ruta y Next los conecta automáticamente.
Los tres archivos clave
- loading.tsx: se muestra mientras el Server Component asíncrono está cargando. Por debajo, Next lo envuelve en un
<Suspense>. Ideal para skeletons. - error.tsx: captura errores lanzados durante el render de esa ruta. Debe ser Client Component y recibe
erroryreset. - not-found.tsx: se renderiza cuando llamas a la función
notFound()o cuando una URL no coincide con ninguna ruta.
Ejemplo de loading con skeleton
// app/dashboard/loading.tsx
export default function Loading() {
return <div className="skeleton h-40 w-full animate-pulse" />;
}Ejemplo de error con reintento
// app/dashboard/error.tsx
"use client";
export default function Error({ error, reset }) {
return (
<div>
<p>Algo salió mal: {error.message}</p>
<button onClick={() => reset()}>Reintentar</button>
</div>
);
}Disparar un 404 desde el código
import { notFound } from "next/navigation";
const curso = await db.curso.findUnique({ where: { slug } });
if (!curso) notFound(); // renderiza not-found.tsxNota
error.tsx captura errores de sus rutas hijas, pero no los del layout que está a su mismo nivel. Para cubrir el layout raíz se usa global-error.tsx.
¿Qué archivo se renderiza al llamar a notFound()?
notFound() interrumpe el render y muestra el not-found.tsx más cercano en el árbol de rutas.Ejercicio práctico
Objetivo: dar a una ruta lenta una experiencia profesional de carga y error.
- Elige una ruta que cargue datos asíncronos (por ejemplo
/dashboard). - Crea
loading.tsxcon un skeleton animado. - Crea
error.tsx(Client Component) con un botón que llame areset(). - Provoca un error a propósito (lanza
throw new Error()) y verifica que aparece el fallback y que "Reintentar" recupera la vista.
Entregable: grabación o capturas de los tres estados: cargando, error y recuperado.
Para recordar
loading.tsxusa Suspense por debajo; perfecto para skeletons.error.tsxes Client y recibeerroryreset.notFound()renderiza elnot-found.tsxmás cercano.
Aplicación práctica en un caso real
Aplicar Loading, error y not-found: UX profesional dentro del contexto de Next.js desde Cero (App Router) con criterio práctico, evitando quedarse en una definición aislada. Para que esta lección sea útil, imagina un escenario concreto: tienes que usar este tema para mejorar un proceso, tomar una decisión, crear un entregable o explicar una recomendación a otra persona. La pregunta no es solo “qué significa”, sino “qué haría diferente después de entenderlo”.
Un buen uso empieza por delimitar el problema. Define qué resultado quieres lograr, qué información tienes disponible, qué restricciones existen y cómo sabrás si la decisión fue correcta. Esta forma de pensar evita respuestas genéricas y convierte el aprendizaje en una herramienta de trabajo.
Marco de decisión
Antes de avanzar, revisa tres niveles: primero, el objetivo operativo; segundo, los recursos disponibles; tercero, el riesgo de equivocarte. En Next.js desde Cero (App Router), muchas decisiones fallan porque se copia una táctica sin entender el contexto. El marco correcto te obliga a adaptar, no solo repetir.
- Objetivo: qué resultado medible o visible quieres conseguir.
- Contexto: quién usará esto, con qué nivel de experiencia y bajo qué restricciones.
- Acción: cuál es el siguiente paso mínimo que puedes ejecutar hoy.
- Señal: qué evidencia vas a observar para decidir si funcionó.
Ejemplo guiado
Supón que debes implementar esta idea en una pequeña empresa o proyecto personal. En vez de intentar una versión perfecta, prepara una versión mínima: una plantilla, una prueba, una lista de control, una automatización simple, una página, un mensaje o una medición inicial. Luego pide feedback o compara el resultado contra una métrica.
Si el resultado mejora, documenta el proceso. Si no mejora, identifica si falló la hipótesis, la ejecución o la medición. Esta distinción es clave: muchas personas abandonan una buena idea por una mala primera ejecución, o escalan una mala idea porque miraron la métrica equivocada.
Errores frecuentes
- Confundir actividad con avance: hacer muchas tareas sin saber qué resultado persiguen.
- Copiar ejemplos sin adaptarlos al cliente, audiencia, equipo o nivel técnico real.
- No dejar evidencia: si no registras decisiones y resultados, no aprendes del proceso.
- Querer automatizar o escalar antes de validar que el enfoque básico funciona.
Ejercicio práctico
- Escribe el objetivo de esta lección en una frase aplicada a tu caso.
- Define un entregable pequeño que puedas crear en menos de una hora.
- Lista tres criterios para evaluar si ese entregable está bien hecho.
- Ejecuta una versión inicial y anota qué cambiarías en una segunda iteración.
Checklist de salida
- Puedo explicar el concepto con mis propias palabras.
- Tengo un ejemplo aplicado, no solo una definición.
- Sé qué error debo evitar primero.
- Tengo una acción concreta para practicar esta semana.