¿Cómo organizar la estructura básica de un componente web?
Al desarrollar un componente web, es fundamental estructurar bien tus carpetas y archivos desde el principio. Un diseño eficiente no solo ayuda al mantenimiento, sino que también facilita escalabilidad futura. Aquí te mostramos cómo se organiza una estructura base.
¿Qué archivos y carpetas necesitamos?
Archivo HTML Principal: Comienza con un archivo index.html.
JavaScript Inicial: Crea app.js para manejar la lógica principal de tus componentes.
Carpeta de Componentes: Diseñada para almacenar los diferentes componentes de tu aplicación. Dentro de esta carpeta, coloca un archivo para cada componente, como product-card.js.
Carpeta de Imágenes: Es útil para gestionar todos los activos gráficos de forma ordenada.
Estilos CSS: Por ahora, un solo archivo styles.css es suficiente, aunque podrías optar por una carpeta separada si el proyecto crece.
¿Cómo enlazamos los archivos en HTML?
Para vincular tu HTML con el archivo JavaScript, debes añadir un script correctamente configurado:
<scripttype="module"src="app.js"></script>
¿Cómo gestionamos los componentes?
Para una aplicación bien estructurada, importa componentes en tus archivos JavaScript en lugar de cargarlos directamente desde el HTML:
// En app.jsimport'./components/product-card.js';
¿Cómo se define un componente web en JavaScript?
Creación de la clase del componente
Define tu componente extendiendo de HTMLElement y configura el shadow DOM para encapsular su estilo:
¿Cómo podemos hacer que el componente sea dinámico?
Por ahora, el componente es estático. En futuras etapas, implementaremos un sistema para pasar datos desde fuera del componente y renderizarlos dinámicamente. También integraremos estilos para asegurar que el componente sea visualmente atractivo y funcional.
Estos pasos sientan una base sólida para un componente web en un proyecto de eCommerce. Si deseas seguir profundizando, continúa explorando tus recursos educativos y aplicando lo aprendido de manera práctica. Mucho ánimo, ¡tu progreso está a la vuelta de la esquina!
@degranda ¿existe algún plugin o forma para syntax highlight para los string literal de estilos y html? me ha parecido bastante tedioso trabajar así y creo que se vuelve aún más tedioso cuando el code base va incrementando. He buscado mucho pero no encuentro algo aún. (Para Vs-code o Atom)
Se que no es la solución ideal lo que te voy a proponer, pero hay una forma de hacerlo menos difícil, en VSCode en la parte de abajo a la derecha en donde dice JavaScript, le das clic y lo cambias a HTML, puedes escribir todo el HTML, tal como siempre lo escribes con todas las ayudas de VSCode y cuando termines, simplemente regresas al tipo JavaScript.
Espero no me den duro por este consejo, pero es la única forma que he encontrado de hacerlo.
que gran solución, gracias Jimmy Buriticá Londoño 👍
Hice el scaffolding de una card mas que nada para poder entender desde cero el tema del ciclo de vida del web component.
De igual manera puedes usar esta card en tu proyecto instalandolo con npm i b-card-web-component 👀
Y por supuesto estaria encantado de recibir pull requests al repositorio. 💚
TIenes algún tutorial para crear mis componentes y que se puedan instalar?
hice el componente y consumi la API de platzi en donde trae muchos productos, pero si al template le agrego ChangedCallback me arroja un error en consola, como una sobrecarga del observador o algo así, si utilizo simplemente un atributes data no sucede esto ¿por qué sucede esto? ¿eso quiere decir que cuando hay que cargar muchos datos es mejor no usar el observer?
Se que es doble trabajo pero yo primero genero el componente y sus estilos como se hace comunmente y luego lo cargo al archivo js
alguien sabe cómo se ponen esos acentos al revés? no lo veo en el teclado de mi pc y siempre tengo que copiar y pegar
👋🏻 Holiii
Depende de la distribución de tu teclado, podrías adjuntar una foto para ver si podemos ubicar el signo.
Tambien puedes presionar Alt+96 para colocarlo ( ` )
Ya encontré la forma:
alt gr +}
Por qué usa la etiqueta <main> si va a hacer un componente reutilizable? Cuando hablan de cards, los asocio a más de una card por vista, y por ende, no se puede usar más de una etiqueta <main>
Tienes algo de razón.
Debió usar un div con un aria-role o un section o mejor un article, pero al final como es una etiqueta custom que encapsula un contenido, su semántica se resumen más al web component general que a los detalles internos.
Para no tener que desplazarse con la barra horizontal para ver toda la línea de código, usa ALT +Z y esto ajustará la vista al ancho de la ventana de tu archivo. De nada : D
Bien, al menos puedo decir que empezamos casi igual la base del proyecto jaja
¿este curso lo estoy viendo en el 2025, todavía está vigente esta metodología?
Hola, yo también estoy haciendo este curso en pleno 2025, y la verdad es que si sigue vigente porque los web components son estándares del navegador, eso quiere decir que en teoría no quedaran deprecados como si le puede pasar a una librería si le dejan de dar mantenimiento, así que si vale la pena aprenderlo y creo que nos da una mejor comprensión de como funciona todo este tema de los componentes especialmente si aún no has aprendido algún framework o librería como React, Vue o Angular
¿Por qué usar los estilos en un archivo CSS si todo el curso vimos que se incluían directamente en el JS?
¿quién me acompaña a usar Atom más allá del día de su archivación?
puedo tener componente dentro de otro? algo asi tipo react js
como puedo crear un componente para el head? tengo varios archivos html y quiero hacer algo asi como el header y footer, que sean globales y que si tengo que editar el header, en todos los archivos se reflejen los cambios
Tengo una pregunta... ¿En qué casos es mejor no usar web components? ¿O realmente siempre será la opción más óptima para los proyectos? Quiero decir... Si monto un proyecto totalmente a punta de web comps, ¿eso haría que todo el proyecto sea client-side-rendering? ¿Qué pasaría entonces en un proyecto grande con los usuarios que tienen mal hardware? ¿No sería muy lenta la navegación? ¿O en caso de que sea un proyecto más server-side-rendering podemos seguir trabajando con componentes, no más el grueso de ellos dejarlo en el HTML con slots? ¡Gracias por cualquier aclaración!
hola compañeros quien por favor me podria ayudar con este error Uncaught SyntaxError: Cannot use import statement outside a module