Sebastian Gomez
Es posible que, mientras construyes tu aplicación, te encuentres con errores como "document is not defined", "localStorage is not defined" o "window is not defined". 😵 Estos problemas ocurren porque hay un componente que no debe ser renderizado desde el lado del servidor, sino únicamente desde el lado del cliente. Esto suele pasar por las siguientes razones:
Para solucionar estos problemas, Next.js ofrece una función llamada Dynamic Imports (Imports Dinámicos) que permite especificar qué componentes no deben renderizarse desde el lado del servidor. 🎉
¿Cómo utilizar Dynamic Imports en Next.js? 🧐import dynamic from 'next/dynamic';
// Importa la función 'dynamic' de 'next/dynamic' para cargar componentes dinámicamente en el lado del cliente.
import dynamic from 'next/dynamic';
// Carga el componente 'MiComponenteDificil' de manera dinámica, sin soporte para el pre-renderizado en el lado del servidor (SSR).
const MiComponenteDificil = dynamic(
// Utiliza una función anónima que retorna una promesa con el componente importado.
() => import('../components/MiComponenteDificil'),
// Establece la opción 'ssr' en 'false' para deshabilitar el pre-renderizado en el lado del servidor.
{ ssr: false }
);
// Define un componente funcional 'Page' que renderiza contenido y el componente dinámico 'MiComponenteDificil'.
const Page = () => (
<div>
<h1>Esto será pre-renderizado</h1>
{/* Esto no será pre-renderizado */}
<MiComponenteDificil />
</div>
);
// Exporta el componente 'Page' como el componente predeterminado.
export default Page;
Así, puedes tener en una misma página componentes que sí pueden ser pre-renderizados desde el servidor y otros que simplemente no.
Espero que este post te haya sido útil y lo puedas aplicar a tus proyectos. 💡 Si te sirvió, quieres añadir alguna opinión o tienes alguna duda, no dudes en dejarme un comentario abajo. 📝 Además, si te gustó, puedes compartir este artículo usando los enlaces a las redes sociales en la parte inferior. 🌐
Creador de contenido principalmente acerca de tecnología.