Consumo de APIs en Next.js con ReactQuery y useEffect
Clase 7 de 24 • Curso de Next.js Avanzado
Contenido del curso
- 10

Internacionalización en NextJS: Middleware y Rutas Dinámicas
11:19 - 11

Internacionalización en Next.js con Traducciones Dinámicas
14:47 - 12

Autenticación de Usuarios con Middleware en Next.js
08:36 - 13

Administración de Cookies con Next.js y JavaScript para Autenticación
15:40 - 14

Integración de Feature Flags en Next.js con LaunchDarkly
20:50 - 15

Manejo de Errores en Next.js: Server Actions y Páginas de Error
14:34 - 16

Integración de Sentry para Monitoreo de Errores en Next.js
12:47
- 17

Gestión del Caché en Next.js: Novedades y Estrategias Avanzadas
17:28 - 18

Seguridad en Next.js: Server Actions y Componentes React
08:35 - 19

Seguridad de Cookies y Encriptación en Aplicaciones Next.js
16:12 - 20

Optimización de Rendimiento en Next.js: Técnicas y Herramientas
17:16 - 21

Despliegue de Aplicaciones Next.js con Vercel y Docker
06:25 - 22

Despliegue de Next.js en Fly.io usando Docker y configuración de Postgres
20:30 - 23

Despliegue de Aplicaciones Next.js con Flyo y Docker
11:00 - 24

Migración y Optimización de Páginas con Next.js
01:59
Crear una aplicación robusta con Next.js implica abordar los desafíos de la gestión de datos tanto en el servidor como en el cliente. Aunque los métodos básicos como useState y useEffect son útiles, librerías avanzadas como React Query simplifican enormemente el manejo de estados asíncronos y optimizan la experiencia de desarrollo.
¿Por qué es necesario consumir datos desde el cliente?
- Las aplicaciones modernas requieren datos dinámicos que no siempre están disponibles en el servidor.
- Por razones de seguridad u operativas, muchas veces el cliente no puede acceder directamente a bases de datos o servicios.
- Next.js y React permiten manejar este tipo de escenarios con componentes específicos y librerías dedicadas.
¿Cómo consumir datos en el cliente usando React?
Método básico con useState y useEffect
-
Inicializar el estado:
- Utiliza
useStatepara almacenar los datos. - Define un estado inicial vacío para manejar la información recibida.
- Utiliza
-
Efectos para realizar el fetch:
- Usa
useEffectpara ejecutar código asíncrono al montar el componente. - Realiza la petición al servidor, procesa la respuesta y actualiza el estado.
- Usa
-
Manejo de estados asíncronos:
- Implementa un sistema de estados (
loading,error,success) para gestionar la carga y posibles errores.
- Implementa un sistema de estados (
Ejemplo de uso:
const [bookmarks, setBookmarks] = useState([]);
const [status, setStatus] = useState('idle');
useEffect(() => {
setStatus('loading');
fetch('/api/bookmarks')
.then((response) => response.json())
.then((data) => {
setBookmarks(data);
setStatus('success');
})
.catch(() => setStatus('error'));
}, []);
¿Cómo optimizarlo con React Query?
-
Configura React Query:
- Instala
TanStack React Querysi no está configurado previamente. - Importa y utiliza el hook
useQuery.
- Instala
-
Define el
queryKeyy la función fetch:- El
queryKeyidentifica la consulta y gestiona el caché. - La función de fetch se integra directamente en React Query.
- El
-
Beneficios adicionales:
- Control automático de estados (
isLoading,isError,isSuccess). - Caché integrado para optimizar peticiones repetidas.
- Manejo seguro de datos y mutaciones.
- Control automático de estados (
Ejemplo con React Query:
import { useQuery } from '@tanstack/react-query';
const fetchBookmarks = async () => {
const response = await fetch('/api/bookmarks');
return response.json();
};
const { data: bookmarks, status } = useQuery(['bookmarks'], fetchBookmarks);
¿Qué alternativas existen a React Query?
- SWR: Librería desarrollada por el equipo de Vercel. Similar a React Query, se enfoca en traer datos de forma eficiente y con soporte de caché.
- Ambas herramientas son excelentes para manejar estados asíncronos y puedes elegir según las necesidades del proyecto.
¿Qué buenas prácticas aplicar al consumir datos?
- Usar librerías avanzadas: Reducen la complejidad y evitan errores comunes.
- Configurar correctamente el caché: Mejora el rendimiento y reduce el tiempo de espera en el cliente.
- Evitar duplicación de lógica: Centraliza las operaciones de fetch para facilitar el mantenimiento.