En el mundo del desarrollo web, es esencial entender las diferencias entre un framework y un CLI. Un CLI como Create React App te facilita el trabajo inicial configurando las bibliotecas necesarias, pero un framework como Next.js va un paso más allá al integrar herramientas internas completas para optimizar aún más el proceso de desarrollo.
¿Por qué es Next.js un framework completo?
Next.js no es solo una herramienta de línea de comandos; es un framework que utiliza la potencia de React para las vistas y añade múltiples herramientas ya configuradas para mejorar la experiencia de desarrollo. A diferencia de Create React App, que configura proyectos iniciales, Next.js integra funcionalidades avanzadas como el enrutamiento y el renderizado en el servidor, lo que facilita el desarrollo de aplicaciones completas sin necesidad de importar múltiples librerías externas.
¿Cómo estructuro una aplicación con Next.js?
Next.js estructura de manera única tus aplicaciones a través de la carpeta pages. Aquí, cada archivo se convierte automáticamente en una ruta para tu aplicación. Por ejemplo:
Un archivo index.js en pages representará la ruta /.
Un archivo about.js en pages representará la ruta /about.
Además, puedes crear subcarpetas para organizarlas mejor y generar rutas anidadas.
importLinkfrom'next/link';constHomePage=()=>(<div><p>Este es un sitio para comprar boletos de tus películas favoritas.</p><Link href="/movies"><a>Ir a comprar pelis</a></Link></div>);exportdefaultHomePage;
¿Cómo funciona el client-side routing en Next.js?
En Next.js, el componente Link se encarga del enrutamiento sin recargar la página, mejorando la velocidad y eficiencia de las aplicaciones. Cuando la página se carga por primera vez, se utiliza el renderizado en el servidor, pero una vez cargada, se transforma en un enrutamiento de cliente, agilizando así la experiencia del usuario:
Para demostrar el poder de Next.js, vamos a añadir nuevas rutas a nuestra aplicación, como una para mostrar facturas de los boletos comprados:
Elimina o renombra archivos existentes según sea necesario.
Crea nuevos archivos para cada nueva página deseada.
// movies.jsimportReactfrom'react';constMoviesPage=()=>{const movies =['Avengers','Terminator'];return(<div><h2>Películas</h2>{/* Renderizar cada película */}{movies.map((movie, index)=>(<div key={index}><p>{movie}</p></div>))}</div>);};exportdefaultMoviesPage;
¿Cómo utilizar información dinámica en Next.js?
Para mostrar información dinámica según la cantidad y tipo de boletos, Next.js utiliza useRouter para acceder a las query de las URLs, permitiendo personalizar la visualización de contenido según los datos proporcionados.
import{ useRouter }from'next/router';constPaymentPage=()=>{const router =useRouter();const{ query }= router;return(<div><p>Compraste{query.quantity} boletos de la película {query.name}.</p><Link href="/movies"><a>Devolvernos</a></Link></div>);};exportdefaultPaymentPage;
Este enfoque permite a los desarrolladores crear experiencias más personalizadas y dinámicas, adaptándose a las acciones del usuario a lo largo de la aplicación.
Estos son los fundamentos clave para trabajar con Next.js, desde la estructura básica hasta la implementación de rutas dinámicas. Está diseñado para hacer que el desarrollo de aplicaciones React sea más rápido y eficiente, y te anima a explorar también su contraparte en el ecosistema de Vue, Nuxt.js.
De Nuxt solo hay 3 clases en un curso de Vue algo viejo, Platzi se ha enfocado mucho en React y ahora están sacando contenido para Angular pero casi nada para Vue 😫😪
Me sumo al pedido. Espero con ansias un curso de Nuxt.js
Debo aclarar algo acá jaja Nest no es un framework para Angular (como lo es Next o Gatsby para React, o Nuxt para Vue), Nest es un framework para backend (muy bueno por cierto ahora que lo estoy aprendiendo 😅)
Sigo queriendo un curso de Nuxt.js!! jaja mientras tanto comparto varios vídeos relacionados:
importFormfrom"./../components/Form";importLinkfrom"next/link";const movies =[{name:"Avengers",available:5,quaantity:0},{name:"Wonder Woman",available:15,quaantity:0}];exportdefaultfunctionMoviePage(){return(<div><Link href="/"><a>Home</a></Link><h3>Peliculas</h3>{movies.map((movie)=>(<Form key={movie.name} movie={movie}/>))}</div>);}
Hagan un curso de ++Nuxt++ porfa!!
Platzi se ha enfocado mucho en React y ahora están sacando contenido para Angular pero casi nada para Vue
😥
No te preocupes. Ya los estamos planeando. Muy pronto tendremos una oleada gigante de cursos espectaculares de Vue (y obviamente viene Nuxt incluído ahí).
Espero que este 404 que tengo, sea llena por el 201 de cursos de Vue en Platzi
Mis Apuntes
En esta clase se trabajo con el framework llamado Next.js tambien conocido como el framework completo que utiliza react para la capa de vistas.
En code sanbox se creo un nuevo template con next.js
Esperar a que se cree el template ya que ahora tambien viene un servidor ya no solo archivos estaticos.
Se borro la carpeta day, se creo el archivo pay.js y se renombro el archivo about.js por movies.js
En index.js se creo una etiqueta <p> para indicar que es un sitio para comprar boletos de peliculas.
En index.js se agrego el componente <link> para redireccionar a la página de movies.js
importLinkfrom"next/link";exportdefaultfunctionIndexPage(){return(<div><p>Este es un sitio para comprar boletos de tus películas favoritas</p><Linkhref="movies"><a>Ir a comprar pelis</a></Link></div>);}
En movies.js se copio el código de clases anteriores de películas.
Se creo la carpeta components y el archivo Form.js
Se copio el código del componente Form de clases anteriores al archivo Form.js
En movies.js se importo el componente Form
importLinkfrom"next/link";import{ useRouter }from"next/router";exportdefaultfunctionPayPage(){const{ query }=useRouter();return(<div><p> Compraste {query.quantity} boletos de la película {query.name}</p><Linkhref="movies"><a>Devolernos</a></Link></div>);}
En pay.js se importo el componente Link
En Form.js se importo el componente Link
En movies.js importar el componente Link y crear el siguiente link
<Linkhref="/"><a>Atrás</a></Link>
En Form.js se módifica la ruta para pasar información dinámica a la página de pay.js
En pay.js para mostrar la cantidad de boletos y nombre de la pelicula se realiza asi:
<p>Compraste {query.quantity}boletos de la película {query.name}</p>
pay.js
importLinkfrom"next/link";import{ useRouter }from"next/router";exportdefaultfunctionPayPage(){const{ query }=useRouter();return(<div><p>Compraste{query.quantity} boletos de la pelicula {query.name}</p><Link href="movies"><a>Devolvernos</a></Link></div>);}
no es un framework dentro denotro framework react es una libreria no un framework
El componente Link ya genera una etiqueta <a>, así que no es necesario poner una etiqueta <a> como hijo del componente Link.
Acá hay un ejemplo: Ejemplo
importLinkfrom"next/link";exportdefaultfunctionIndexPage(){return(<div><p>Este es un sitio para comprar boletos de tus peliculas favoritas</p>HelloWorld.{" "}<Link href="/movies"><a>Ir a comprar pelis</a></Link></div>);}
que cool quedó:)
Alguien sabe qué está pasando? 😕
Hmmm...
Parece un error de Code Sandbox, no uno tuyo.
Yo intentaría recargar la página para que CodeSandbox vuelva a instalar las herramientas y a lo mejor así se logre soucionar. Si no, tal cual podrías crear otro sandbox.
Ya lo intenté un par de veces pero me sigue saliendo esa imagen :c ... Además cuando recargo me sale esto:
Como ves, esta vez no borré absolutamente nada, solo puse un html distinto :c
Cuando cambio el nombre del archivo about.js el Sandbox me arroja "error interno de servidor" :(
Module not found:Error:Can't resolve '/sandbox/node_modules/next/dist/build/babel/loader/index.js' in '/sandbox'
Recuerda que cuando cambies el nombre de tu archivo también debes hacer el cambio en los imports que hagas dentro de tus archivos.
buenas, estoy creando el template next.js de codesandbox (como muestra juan en el video) pero no me carga más de lo que muestro en la foto. Recargué la pagina varias veces y siempre se queda ahi. ¿alguno sabe que pasa? ¿uso otro template de next?
entonces Next.js es un router? y es de CSR?
Nop. Next.js es un Framework. Internamente usa React.js para las vistas, pero internamente también usa y creó muchas otras herramientas para routing, server side rendering, client side routing, generación de sitios estáticos, entre muchas otras características.
Excelente entonces es un framework para react todo en uno 😮
dejare mi aporte por aca. solo cree el tema para el Form ya que intente no usar styled components para crear los temas. de la misma manera el tema es local y no global. creo que a futuro voy a crearle un tema oscuro y uno claro para practicar los temas globales.
https://codesandbox.io/s/clase-movies-en-next-js-uo0v1o?file=/pages/movies.js
me saco como mil errores distintos, luego de recargar y recargar... no funciono. Pero cerré chrome, lo volví a abrir, y luego ya si me funciona sin problemas. espero que le sirva a alguien.
next vx nuxt ?
asp. net mejor
He recargado varias veces la pagina pero no me funciona, quede en el minuto 5:49. Alguien sabe que puedo hacer?
Pudiste probar generando un nuevo proyecto con Next e intentando desde allí?