Contenido del curso
Renderizado declarativo
Input de usuario
Reactividad
Listas y condicionales
Componentes personalizados
Comunicación entre componentes
Componentes en el Virtual DOM
Cierre del curso
Componentes reutilizables con props en Vue.js
Resumen
La reutilización de código en Vue.js se logra encapsulando lógica y vista en componentes aislados. Cuando tu template crece demasiado, separar bloques repetidos en piezas independientes hace que la aplicación sea más mantenible, escalable y fácil de leer, sobre todo si trabajas con listas dinámicas o estructuras que se repiten en distintas partes de la interfaz.
¿Qué es un componente en Vue.js y por qué importa?
Un componente es un bloque autocontenido que agrupa template, datos y comportamiento, y que puedes invocar como si fuera una etiqueta HTML cualquiera. Vue.js organiza la aplicación como un árbol de componentes: existe un componente raíz creado con Vue.createApp y, debajo, tantos hijos como necesites.
¿Qué es un componente en Vue.js? Es una pieza de interfaz reutilizable que combina HTML, datos y lógica. Se declara una sola vez y se usa cuantas veces quieras dentro de otros templates.
Hasta antes de aplicar este patrón, todo vivía dentro del componente raíz: el template, los métodos, el data y las propiedades computadas. Ese enfoque funciona al inicio, pero termina volviéndose un archivo enorme difícil de mantener [01:05].
¿Cómo refactorizar tu app para registrar un componente?
El primer paso es separar la creación de la app del montaje sobre el DOM. Esto te da acceso a la instancia de la aplicación para registrarle componentes internos.
js const app = Vue.createApp({ /* opciones del root */ }) const vm = app.mount('#app')
Con app disponible, puedes registrar un componente con app.component, que recibe dos argumentos: el nombre del componente y un objeto de configuración con sus opciones de Vue.js [02:30].
js
app.component('item', {
template: <div class="item"> <h3>{{ post.title }}</h3> <p>{{ post.description }}</p> </div> ,
props: ['post']
})
¿Cómo se usa el componente dentro del template padre?
Una vez registrado, lo invocas como cualquier etiqueta HTML. Aquí es donde el v-for y el :key se mueven al lugar donde se usa el componente, no donde se define.
html <item v-for="(item, index) in posts" :key="index" :post="item"
</item>
Fíjate en el detalle: el v-for y la clase item salen del template hijo y la clase queda dentro del componente aislado. Así, el padre solo se encarga de iterar y pasar datos.
¿Cómo se comunican los componentes con props?
Los componentes hijos no leen el estado del padre por arte de magia: necesitas pasarles información explícitamente con un prop. Un prop es un atributo personalizado que defines en el hijo y al que el padre le asigna un valor.
En el ejemplo, el padre pasa cada elemento de la lista con :post="item", y el hijo lo declara así:
js props: ['post']
Dentro del template del componente item, accedes a esos datos como post.title y post.description. Esa es la frontera limpia entre quién posee los datos y quién los dibuja [05:10].
¿Qué son los props en Vue.js? Son atributos personalizados que un componente padre envía a un hijo para compartirle datos. El hijo los declara en su opción
propsy los usa como variables dentro del template.
¿Qué pasa si olvidas un detalle de sintaxis?
Un espacio mal puesto en el template puede romper la app entera y arrojar un error en la consola. Cuando recargas la aplicación y algo no se dibuja, el primer lugar a revisar es la sintaxis del template del componente recién creado [06:40].
¿Cómo funciona el árbol de componentes en Vue.js?
Vue.js gestiona la interfaz como un árbol jerárquico parecido al DOM, pero operando sobre un virtual DOM: una estructura en JavaScript que Vue usa internamente para calcular cambios y renderizar de forma eficiente.
- El componente raíz es el que creas con
Vue.createAppy contiene a todos los demás. - Cada componente hijo puede, a su vez, tener sus propios hijos.
- Cualquier nodo del árbol puede declarar su propio
data,methods,computedywatchers.
Esa independencia es lo que hace al patrón tan poderoso: cada componente vive con sus propias responsabilidades, y la comunicación fluye por props hacia abajo.
Habilidades y conceptos clave de esta clase
- Vue.createApp y mount [01:50]: separar la creación de la instancia del montaje permite registrar componentes antes de renderizar.
- app.component [02:30]: método para registrar un componente global con nombre y objeto de opciones.
- Template aislado [03:20]: cada componente encapsula su propio HTML, incluyendo clases como
item. - Props [05:10]: mecanismo de comunicación de padre a hijo mediante atributos personalizados.
- v-for con :key [04:15]: se aplican sobre la etiqueta del componente al usarlo, no en su definición.
- Virtual DOM [07:20]: estructura en JavaScript que Vue usa para gestionar el árbol de componentes de forma eficiente.
- Reutilización [06:00]: un componente se declara una vez y se usa tantas veces como necesites.
¿Qué otros bloques del ejemplo extraerías como componentes propios? Cuéntame en los comentarios cómo reorganizarías la cuenta de usuario o el formulario para llevar esta arquitectura más lejos.