Resumen
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
useState
para almacenar los datos. - Define un estado inicial vacío para manejar la información recibida.
- Utiliza
-
Efectos para realizar el fetch:
- Usa
useEffect
para 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 Query
si no está configurado previamente. - Importa y utiliza el hook
useQuery
.
- Instala
-
Define el
queryKey
y la función fetch:- El
queryKey
identifica 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.