Estructura Base de Componentes Web con HTML, CSS y JavaScript

Clase 19 de 22Curso de JavaScript: Web Components

Resumen

¿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?

  1. Archivo HTML Principal: Comienza con un archivo index.html.
  2. JavaScript Inicial: Crea app.js para manejar la lógica principal de tus componentes.
  3. 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.
  4. Carpeta de Imágenes: Es útil para gestionar todos los activos gráficos de forma ordenada.
  5. 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:

<script type="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.js
import './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:

class ProductCard extends HTMLElement {
  constructor() {
    super();
    this.attachShadow({ mode: 'open' });
  }
}
customElements.define('product-card', ProductCard);

¿Cómo estructuramos el contenido del componente?

Crea un template HTML dentro de tu clase con el contenido del componente, teniendo en cuenta:

  • La estructura debe ser modular, usando etiquetas como main, img y div.
  • Incluye un sistema de encabezados y etiquetas que faciliten la accesibilidad y SEO, como h2, h3, y p.
  • Adiciona elementos interactivos como botones para mejorar la experiencia del usuario.
getTemplate() {
  const template = document.createElement('template');
  template.innerHTML = `
    <main>
      <img src="" alt="Product Image">
      <div>
        <h2>Hello World</h2>
        <p>Description goes here.</p>
        <h3>$Price</h3>
        <button>Buy Now</button>
      </div>
    </main>
  `;
  return template;
}

¿Cómo renderizamos el componente en el DOM?

Implementación del método render

Una vez definido el template, utiliza un método render para clonar su contenido y añadirlo al shadow DOM:

render() {
  this.shadowRoot.appendChild(this.getTemplate().content.cloneNode(true));
}

connectedCallback() {
  this.render();
}

¿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!