¿Qué son las rutas estáticas y dinámicas en Next.js?
Next.js, uno de los frameworks más populares para construir aplicaciones React, maneja con destreza dos tipos principales de rutas: estáticas y dinámicas. Comprender estas distinciones es vital para diseñar aplicaciones eficientes y robustas. Las rutas estáticas son aquellas con un path fijo predefinido dentro de nuestro proyecto, mientras que las dinámicas se adaptan dependiendo de la URL ingresada, proporcionando flexibilidad y escalabilidad a la aplicación.
¿Cómo crear rutas estáticas?
La creación de rutas estáticas en Next.js es un proceso intuitivo, que se basa en la estructura de archivos y directorios del proyecto—a menudo denominado como "file system-based routing". Supongamos que estás desarrollando una tienda en línea. Puedes definir rutas estáticas creando un directorio específico y un archivo page.tsx correspondiente, siendo innecesario importar React explícitamente. Esta simplicidad es uno de los mayores atractivos del framework.
Por ejemplo, para definir la ruta de la tienda principal:
// Dentro del archivo store/page.tsxexportdefaultfunctionStore(){return<h1>Store</h1>;}
¿Por qué usar rutas dinámicas?
Las rutas dinámicas se vuelven cruciales cuando nuestras URL's deben adaptarse a datos que cambian, como al navegar por categorías de productos que podríamos obtener de una API. En Next.js, estas rutas se definen mediante directorios que llevan el nombre del parámetro rodeado por corchetes.
Por ejemplo, para manejar categorías en una tienda en línea:
// Dentro del archivo store/[category]/page.tsxinterfaceCategoryProps{ params:{ category:string;};}exportdefaultfunctionCategory({ params }:CategoryProps){return<h1>Categoría dinámica: {params.category}</h1>;}
Aquí, params.category permite acceder al segmento de la ruta dinámica, facilitando el uso de datos específicos de la URL como un título o para consultar una API. Esto no solo simplifica la organización del código, sino que mejora el rendimiento al evitar la carga y re-renderización innecesaria de componentes.
¿Cómo aprovechar al máximo el sistema de rutas de Next.js?
El file system-based routing de Next.js ofrece una oportunidad para atomizar los componentes, mejorando la mantenibilidad de la aplicación al segmentar la lógica en piezas más pequeñas y especializadas. Al preferir este modelo sobre un aglomerado de componentes en un solo archivo, no solo mantienes el código más limpio, sino también más eficiente.
Al diseñar, pregúntate cómo puedes desglosar las funcionalidades en segmentos claros y reutilizables dentro de tu aplicación. ¿Puede cada categoría de productos en tu tienda ser un componente individual? De ser así, cada componente puede gestionarse de manera aislada, optimizando el renderizado y consumo de datos. Así, ante cambios, el impacto se minimiza y se facilita la adaptación del código a nuevas funcionalidades o arreglos.
El uso conjunto de rutas estáticas y dinámicas en Next.js ofrece una poderosa herramienta para construir aplicaciones web que sean no solamente funcionales sino también elegantes y fáciles de mantener. Mantengamos siempre presente el equilibrio entre simplicidad y escalabilidad, asegurando que cada ruta refuerce la estructura y eficiencia de nuestro proyecto.
Rutas Estáticas y Dinámicas en Next.js: Creación y Uso Práctico
Rutas Estáticas y Dinámicas en Next.js: Creación y Uso Práctico
Rutas Estáticas:
Son rutas cuyos paths o URL son definidos de manera estática. Esto significa que el contenido asociado a estas rutas se genera durante la fase de compilación y no cambia después de que la aplicación ha sido construida y desplegada.
En Next.js, las rutas estáticas son típicamente creadas en el directorio pages de tu proyecto. Cada archivo en pages se convierte en una ruta estática.
En este ejemplo, /, /about, y /contact son rutas estáticas porque sus paths son definidos de manera fija y no cambian durante la ejecución de la aplicación.
Rutas Dinámicas:
Son rutas que pueden cambiar dinámicamente en función de parámetros específicos que se incluyen en la URL. Esto permite crear páginas que pueden manejar diferentes contenidos según los valores de los parámetros.
En Next.js, puedes lograr rutas dinámicas utilizando corchetes [] en los nombres de los archivos en el directorio pages.
En este ejemplo, /posts/[id] es una ruta dinámica porque [id] es un marcador de posición para un parámetro que puede variar en cada solicitud. Puedes tener URLs como /posts/1, /posts/2, etc., y el valor de id se utiliza para personalizar el contenido de la página.
En resumen, las rutas estáticas se definen con paths fijos y su contenido se genera durante la compilación, mientras que las rutas dinámicas permiten manejar parámetros que pueden cambiar en función de la URL solicitada. Next.js ofrece una forma conveniente de trabajar con ambos tipos de rutas y proporciona una gran flexibilidad para desarrollar aplicaciones web. (Créditos a chatgpt)
Hola, para los que seguimos usando el comando latest para la creación de la app encontramos que para NextJS +15 el manejo de rutas dinamicas cambio:
interfaceCategoryProps{params:{category: string;}}exportdefaultasyncfunctionCategory(props:CategoryProps){const{ category }=await props.params;console.log(category);return(<div><h2>Category</h2></div>);}```A partir de esta versión, los parámetros (`params`) se pasan como promesas, lo que significa que se debe manejar su resolución de manera asíncrona. 
Actualmente, al usar next js 15, arroja un mensaje de error al obtener las propiedades y es que ahora se aconseja obtenerlas de manera asyncrona. Aunque el ejercicio que hacemos funciona y se muestra en pantalla... se debe tener en cuenta este detalle.
Adjunto documentación de la versión 15 para arreglar esta warning:
Nextjs provee un paquete que automáticamente cambia tu código para que acate las nuevas prácticas, aunque no prometen cachar/arreglar todos los casos, por lo cual muestran una forma de arreglar la warning manualmente tanto para el cliente o servidor. Para el warning the esta clase en específico se resuelve del lado del servidor.
Hola, puede pasar que cuando creaste el file page.tsx dentro de la carpeta store, lo hiciste en mayuscula cuando deberia ser en minuscula, seria de la siguiente manera para explicarme mejor
Es porque las rutas reciben parámetros, entre ellos la configuración de las props, únicamente está definiendo ese tipo de dato. Te dejo la documentación por si mi explicación fue mala:
.
Psdta: Le cambias la opción de "JavaScript" a "TypeScript".
Creo tener el mismo error que tu, al analizar la respuesta vi que en mi caso la devolvía como una promesa, es por eso que aplique la siguiente solución:
Señores! Para los que esten haciendo este curso en estos tiempos mas actuales, deben saber que en las versiones más recientes de Next.js (como la versión 15 y superiores), las params en los Server Components son Promesas. Así que el componente debe ser async y hacer un await de los params antes de acceder a sus propiedades, si no, no les va a funcionar:
exportdefaultasyncfunctionCategory({ params }){const{ category }=await params;return(<h1>The category is: {category}</h1>)}
sip sin ningun problema, asi funciona y es super intuitivo aunque si se complicaria un poco el FS, nada que ver en comparación de hacerlo de forma manual con un router normal como react-router
Si compartes un enlace externo a otra web debes usar la etiqueta anchor, si es interno usa el componente link de Next.js para una navegación fluida y rápida.
Para version 15 me quedo :constHistorialTasas=async({ params }:{params:Promise<{category: string }>})=>{const resolvedParams =await params;// Esperar a que se resuelvaconst category = resolvedParams.category;return(<div><h2>Categoría:{category}</h2></div>);};exportdefaultHistorialTasas;
Hola Carlos, una alternativa en la creación tu componente sería: