¿Cómo crear una arquitectura profesional para una landing page?
El desarrollo de una landing page efectiva implica una buena organización y componentización del código, lo que permite un mantenimiento a largo plazo y una estructura clara. A continuación, te mostraré cómo estructurar tu proyecto utilizando componentes tanto compartidos como específicos de página.
¿Cuál es el proceso para organizar componentes compartidos?
El primer paso es identificar los componentes que serán compartidos entre diferentes layouts o utilizados en un sistema de diseño común, como botones o tarjetas. Estos componentes deben ser ubicados en una carpeta llamada shared. Por ejemplo, el componente Header es un componente compartido que se clasificará dentro de esta carpeta:
// En la carpeta sharedexportconstHeader=()=>{return(<header>{/* Contenido del header */}</header>);};// Proxy para exportarexport*from'./Header';
¿Cómo organizar componentes específicos de la página?
Los componentes específicos de una página, como podría ser la landing page del home, se deben agrupar en una carpeta correspondiente al dominio dentro de components. Por ejemplo, para el home, podríamos tener una estructura como la siguiente con componentes Hero, MainProducts y Description:
Crear una carpeta home dentro de components.
Dentro de home, crear los componentes necesarios.
Ejemplo de componente Description:
// Dentro de la carpeta homeexportconstDescription=()=>{return(<section> Descripción del producto
</section>);};// Proxy para exportarexport*from'./Description';
¿Por qué emplear archivos proxy de exportación?
Utilizar un archivo index.ts como proxy para exportar componentes facilita las importaciones en otras partes del proyecto y mejora la legibilidad del código. Esto evita que las rutas de importación sean redundantes y permite cambios más sencillos:
// Archivo proxy: index.tsexport*from'./Footer';
Cuando se realice la importación, se hace de manera simplificada:
// Importando el Footerimport{Footer}from'../components/shared';
Esta práctica también ayuda a que, si uno de nuestros componentes falla, el mensaje de error indique exactamente dónde está el error y cuál fue el componente que lo causó.
¿Cómo estructurar una página de manera limpia?
Es importante adoptar una metodología de bloques y componentes encapsulados, evitando código extenso en los layouts. A la larga, esta práctica facilita el mantenimiento y permite cambios o actualizaciones con menor riesgo de errores.
Por ejemplo, para la landing page:
import{Header,Footer}from'../components/shared';import{Description}from'../components/home';constHomePage=()=>{return(<><Header/>{/* Otros componentes como Hero y MainProducts */}<Description/><Footer/></>);};exportdefaultHomePage;
Este enfoque similar a bloques de Lego para la organización del código no solo mantiene la estructura limpia, sino que también hace que el desarrollo sea más flexible y escalable.
Utilizar una arquitectura de componentes bien organizada es vital para el éxito del desarrollo web profesional. Te invito a que apliques estas prácticas para mejorar la calidad y mantenibilidad de tu código en tus proyectos. ¡Sigue adelante y continúa aprendiendo!
Qué maravilla, amo este curso. Es porque lograron hacerlo conceptual pero a la vez práctico. A veces lo hacen muy enfocado en el proyecto y se olvidan de lo que están enseñando. El curso de React me parece que comete ese error, se enfoca más en enseñarte a hacer una Todo-App que en enseñarte React.
Concuerdo contigo Juan
aqui tiene que ver el expertise del maestro de sepa enseñar
Para exportar los componentes, lo organizo de otra manera...
-components
|__Footer
|__index.tsx|__styles.module.ts|__index.ts```En el index del Footer desarrollo el componente:
```js
constFooter=()=>{};export defalut Footer;```Y en el index de la carpeta componentes exporto todos los componentes:
```js
export{deafult asFooter}from'./Footer';```Entonces cuando necesito importar varios componentes de esta misma carpeta, tengo una sola línea de importación:
```js
import{Footer,OtroComponente,OtroComponente}from'./components';
bonita implementación.
¡Me parece fabuloso!
Hola!
¿Como se llama ese patrón de arquitectura?
¡Buena pregunta!
Cual es la diferencia entre usar proxies y barrels?
Consulta, si el componente footer estar dentro de una carpeta footer que tiene un archivo index que exporta el componente para facilitar la importacion.. por qué no directamente poner el componente Footer desntro de la carpeta shared?
Me parece que separar cada elemento en carpeta sirve para tener mucho orden en las jerarquías y para tener la posibilidad de modificar elementos puntualmente en cierta parte de tu app, por ejemplo, agregar un layout específico.
Me parece una falta de respeto no decir cuál es el tema y qué extensión para los iconos usa el profesor u.u
solo se que usa el tema monokai dark, github Copilot (es de pago) y ESLint.
Siento que así como de fácil es armar una aplicación con buen performance en Nextjs así de fácil es regarla y hacer algo que no tenga buen performance
Tengo entendido qué, los Barrel files, como son el "index.ts" de Description, no son tan prácticos ni tan buena práctica.
Si alguien tiene mejor detalle, favor de aclarar.
Con Auto Barrel for VS Code, se hace más rápido y si agregan más componentes, también permite actualizar los archivos index.ts
Para quienes no ven la necesidad crear una carpeta para un componente que dentro tiene un archivo con el mismo nombre junto a un index.ts para exportarlo, es porque en proyectos grandes, un componente va acompañado de estilos, tests, declaraciones de tipos, etc. Y a la hora de exportar todo se canaliza por el index como un proxy, esto es así para anidaciones de archivos y carpetas en cualquier escala.
Es decir que en lugar de colocar el export { Footer } from './Footer' en el mismo archivo de Footer.tsx, tu recomiendas crear index.ts ?
Es lo que trata de explicar, para evitar el estar exportando directamente el nombre del archivo sino que con el index exporta la carpeta y automáticamente están programadas para buscar el index y es por eso que sabe que mostrarnos
En el curso se aborda cómo organizar y componentizar el código en Next.js. Aquí hay un resumen del proceso:
Estructura de Carpetas: Se crean carpetas para componentes compartidos (como el header y footer) y específicos para la landing page.
Componentes: Cada parte de la aplicación se divide en componentes individuales (Hero, Main Products, Description).
Exportación: Se utiliza un archivo index.tsx en cada carpeta de componentes para simplificar las importaciones.
Organización: Se recomienda mantener el código limpio y ordenado, evitando grandes bloques de código en las páginas.
Este enfoque promueve un mantenimiento y escalabilidad más sencillos en proyectos a largo plazo.
Tengo una duda que no me deja vivir 🙋🏻.
Si bien envolviendo nuestro layout con la anotación de "use client", va a envolver toda nuestra aplicación con un renderizado del lado del cliente, perdiendo el performance.
En ese orden de ideas...
Como se debería manejar a la hora de crear un estado global con redux por ejemplo?
Imagen de ejemplo practico:
oficialmente mi profe fav de platzi, que bien explica los temas!
Me he quedado atascado en cierta forma, ya que me dice que mi tienda no tiene un tema. Creo que esto se debio de haber mostrado el como crearlo primero o como terminar de hacer todos los setting de nuestra tienda de shopify.
El curso me ha gustado y aunque graphql no lo he trabajado mucho, honestamente hay muchas partes donde falta comentar donde hizo cierto cambio, el por que de algunas cosas y dejar algun aviso donde podamos ver que si se da un error, en la siguiente clase se solucionara. Ya me ha pasado que por esto ultimo perdi hasta una hora pensando que en algo la heche a perder.