Crear componentes reutilizables con Vue
Clase 25 de 37 • Curso de Reactividad con Vue.js 3
Contenido del curso
Reactividad a profundidad
- 6

Paradigma reactivo: responsivo, resiliente y escalable
03:49 min - 7

Proxies: la clave de la reactividad Vue
06:29 min - 8

Creando tu primer mini framework reactivo
07:04 min - 9

Integrar Proxy para crear mini framework reactivo
06:06 min - 10

Refleja tu lógica mantenible con JavaScript
09:29 min - 11

Conceptos clave de reactividad: efectos, track y trigger
03:53 min - 12

Efectos trackers triggers: cómo Vue vincula datos
07:39 min
Templates de Vue.js
- 13
Templates de HTML en Vue.js: Mejores Prácticas Esenciales
00:21 min - 14

Estructura inicial de Platzy Commerce con Vue
06:52 min - 15

Expresiones JavaScript en templates Vue
06:49 min - 16

v-bind y clase reactiva en Vue.js
06:08 min - 17

v-show vs v-if en Vue: cuándo usar cada uno
08:53 min - 18

Directiva v-for para listas en Vue.js
08:14 min - 19

Eventos con v-on en templates de Vue
06:49 min
APIs internas de Vue.js
Segunda capa: componentes de Vue.js
- 25

Crear componentes reutilizables con Vue
Viendo ahora - 26

Cómo pasar datos de padre a hijo en Vue
14:13 min - 27
Creación de Componentes Personalizados en Aplicaciones Web
00:37 min - 28

Eventos personalizados en Vue: comunicar hijo a padre
04:27 min - 29

Eventos personalizados con Composition API
03:57 min - 30

Watchers en Vue Options API
08:53 min - 31

Watchers en Vue Composition API
08:19 min - 32

Computed properties vs watchers en Vue
05:17 min - 33

Computed en Vue Composition API
06:20 min - 34

Ciclos de vida en Vue: cuándo y cómo cargar datos
08:19 min - 35

Ciclos de vida en Composition API
06:03 min
Siguientes pasos
Organiza y acelera tu desarrollo con componentes reutilizables en Vue. Aquí verás, paso a paso, cómo aislar la sección de un producto en un componente propio usando la Options API, registrar su template, data y methods, y montarlo en el orden correcto para lograr estado independiente y mejor mantenimiento.
¿Cómo convertir una sección en un componente reutilizable en Vue?
Componentizar evita copiar y pegar bloques grandes de HTML y lógica. En lugar de duplicar la sección de producto y su descripción, creamos un componente que podremos insertar cuantas veces queramos, cada uno con su propio estado.
- Una aplicación ya es un componente: HTML, CSS y JavaScript en un mismo lugar.
- Identifica en el template la sección del producto y su descripción.
- Objetivo: reutilizar y mantener sin duplicar código.
- Resultado: un nuevo tipo de etiqueta HTML personalizada que representa el componente.
¿Qué problemas resuelve la componentización?
- Evita duplicación: no más copiar y pegar secciones enteras.
- Mejora mantenimiento: cambios en un solo lugar.
- Aísla responsabilidades: cada componente maneja su propio estado y métodos.
¿Cómo crear y registrar el componente Product con Options API?
Para crear el componente, se registra con app.component y se definen sus opciones: template, data y methods. Así trasladamos la sección del producto, su estado (por ejemplo, la imagen activa y los códigos de descuento) y su lógica.
// Product.js
app.component('Product', {
template: `
<!-- Vue HTML -->
<section class="product">
<!-- HTML del producto y su descripción. -->
</section>
`,
data() {
return {
// product: ...,
// activeImage: ...,
// discountCodes: ...,
};
},
methods: {
// métodos del producto: cambiar imagen, aplicar descuento, etc.
}
});
- Usa un template string para pegar el HTML del producto.
- Si usas Visual Studio Code: añade el comentario “Vue HTML” para resaltar sintaxis.
- Traslada a
data()el estado reactivo del producto: product, activeImage, discountCodes. - Mueve a
methodsla lógica asociada al producto.
¿Qué rol cumplen template, data y methods?
- template: estructura HTML del componente.
- data: estado reactivo propio del componente.
- methods: funciones que operan sobre ese estado.
¿En qué orden se deben cargar los scripts y montar la app?
El registro del componente debe ocurrir antes de montar la aplicación. Primero se inserta el archivo del componente; después, se crea y monta la app. Así Vue conoce la etiqueta personalizada cuando renderiza.
<div id="app">
<product></product>
</div>
<!-- Registrar el componente primero -->
<script src="Product.js"></script>
<!-- Luego crear y montar la app -->
<script>
const app = Vue.createApp({ /* opciones de la app si aplican */ });
// Nota: Product ya fue registrado con app.component en Product.js.
app.mount('#app');
</script>
¿Cómo usar la nueva etiqueta personalizada en el HTML?
- Inserta el componente como una etiqueta:
<product></product>. - Puedes duplicarlo para múltiples productos:
<product></product><product></product>. - Cada instancia tiene estado independiente: cambiar la imagen activa o aplicar un código de descuento afecta solo a esa instancia.
¿Qué pasa con el estado global, como el carrito?
- Acciones como add to cart viven en el estado global de la aplicación.
- Desde el componente, esa referencia aún no existe: por eso puede “romperse”.
- Más adelante se conectará el estado del componente con el global de forma adecuada.
¿Tienes dudas sobre cómo aislar tu lógica o conectar el estado del componente con el global? Comparte tu caso en los comentarios y lo revisamos juntos.