Crear componentes en Vue es clave para lograr HTML semántico, código reutilizable y mejor mantenibilidad. Aquí verás, paso a paso y con buenas prácticas, cómo registrar componentes en forma global y local, cuándo conviene cada enfoque y cómo evitar errores de compilación comunes.
¿Qué es el sistema de componentes de Vue y por qué importa?
Los componentes de Vue permiten escribir tus propios elementos HTML, haciendo el código más semántico, reutilizable y fácil de organizar. Con ellos puedes componer interfaces claras y mantener una estructura robusta.
Componentes: elementos reutilizables con su propia plantilla y lógica.
HTML semántico: etiquetas claras que comunican intención.
Mantenibilidad: separación por piezas pequeñas y enfocadas.
Reglas del template: siempre un único elemento padre en cada componente.
Productividad: puedes apoyarte en plug ins del editor (por ejemplo, atajos o shorthands en Atom).
¿Cómo crear y registrar un componente global en Vue?
El registro global permite usar un componente en cualquier parte de la aplicación. Es práctico, aunque no siempre recomendable si buscas optimizar performance.
¿Cómo estructurar un archivo .vue mínimo?
Un componente puede comenzar solo con la plantilla si no necesita estilos ni script:
<!-- ChildComponent.vue -->
<template>
<h1>Este es un componente hijo</h1>
</template>
Puntos clave.
Mantén un único nodo raíz en el template.
Si no usas <script> o <style>, elimínalos para no cargar el proceso de compilación.
¿Cómo registrar con Vue.component y usar el tag?
En tu punto de entrada (por ejemplo, main.js) importa y registra globalmente. Recuerda usar rutas relativas ./ y que en archivos .vue debes incluir la extensión.
Úsalo cuando el componente se empleará en la mayoría de vistas o cuando creas librerías tipo plug ins reutilizables. De lo contrario, prefiere el registro local para mejorar la performance de la aplicación.
¿Cómo registrar componentes locales y evitar errores comunes?
El registro local declara el componente directamente en el archivo donde se usa. Así controlas su alcance y evitas cargar componentes innecesarios.
¿Cómo importar y declarar con la propiedad components?
Crea un componente local simple:
<!-- LocalComponent.vue -->
<template>
<h1>Este es un local component</h1>
</template>
En el componente padre (por ejemplo, ChildComponent.vue) importa y registra en la propiedad components. Recuerda que un componente exporta un objeto con export default usado como view model.
<!-- ChildComponent.vue -->
<template>
<div>
<h1>Este es un componente hijo</h1>
<local-component></local-component>
</div>
</template>
<script>
import LocalComponent from './LocalComponent.vue'
export default {
components: {
LocalComponent // atajo de ES2015 si el nombre y la variable coinciden
}
}
</script>
Claves prácticas.
Propiedad components: mapea el nombre del elemento al objeto del componente.
Usa atajos de ES2015 para simplificar objetos cuando los nombres coinciden.
¿Cómo escribir el tag en kebab-case a partir de PascalCase?
Vue transforma automáticamente nombres en PascalCase a kebab-case para las etiquetas. Es decir, LocalComponent se usa como <local-component>. Esto evita inconsistencias al escribir los tags en el template.
¿Cómo evitar el error por múltiples nodos raíz?
Si agregas más de un elemento en el template, encapsula todo en un contenedor (por ejemplo, <div>). De lo contrario, aparecerá un error de compilación y la aplicación no funcionará.
Buenas prácticas finales.
Verifica en el inspector que el HTML final refleja el resultado compilado por Vue.
Revisa el árbol de componentes para entender la jerarquía: App como raíz, luego hijos como Child y LocalComponent.
Sigue la data y propiedades entre componentes desde esa vista.
¿Tienes dudas o ejemplos propios sobre registro global vs local, nombres de etiquetas o estructura de componentes? Comenta tus casos y soluciones para enriquecer el aprendizaje en equipo.
¿ Cual es el nombre del plugin para el autocomplete que utilizas para atom ?
Creo que es este
no saben cual es el nombre de uno para sublimetext 3?
plugin ára VSCode = Vue VSCode Snippets
Es mejor usar localcomponents, así únicamente los usas en donde los necesites sin tenerlo por ahí regado en varios componentes
Para reafirmar:
import para archivos .vue llevan .vue, los .js no llevan .js
Me esta gustando mucho este framework
Los componentes son parte de logica por ejemplo un boton donde puede ser reutilizable en otro view componente se pueden utilizar de forma global como tambien de manea local, los componente globales son aquellos que pueden ser utilizando en cualquier componente relacionado con el proyecto y los componente los locales solo pueden ser utilizados por el componente que lo llama o importa
Un componente registrado de forma global, lo puedes implementar o invocar en cualquier parte (componente o subcomponente) de tu aplicación.
Un componente registrado de forma local, le indicas a vue donde especificamente vas a utilizar dicho componente.
Tu revelacion es muy certera, pero es mejor que los llamemos componentes Padres y Hijos, ya que casi en la mayoria de los libros y recursos asi esta estandarizado.
Deberían indicar desde el principio que se va a utilizar PUG en vez de HTML puro, porque muchos de nosotros queremos mantener la consistencia con los proyectos de la empresa en la que trabajamos usando lenguajes y templates estándar.
Estoy abandonando el curso por esta razón.
Un snippet de Vue para los que usan sublime.
Solo escriban vuec + tab para generar el template que muestra Nacho.
Repo:
Oye gracias por el dato.
Se ve genial el plugin
Los componentes pueden ser globales para estar disponibles en toda nuestra aplicacion o ser llamados de forma local en el archivo donde va ha ser usado.
Es recomendable hacer usos de los componentes y llamarlos de forma local.
Recuerden que el core de Vue se divide en su sistema declarativo y el sistema de componentes.
¿Cual es la diferencia entre un child y un local component?
Child y local son simplemente nombres que elegimos. Se supone que todos los componentes que re utilizas son hijos de otro componente.
En realidad la diferencia esta en como instalas un componente, esa instalacion puede ser local o global. En el video el ChildComponent es un componente local, eso quiere decir que lo inyectas en el main.js y lo haces accesible inmediatamente en todos los componentes. Eso esta bueno porque es mas facil pero por otro lado estas cargando algo en lugares donde seguramente no lo utilices.
La otra manera es la instalacion local (de ahi el LocalComponent) y lo unico que cambia es que en lugar de registrarlo a nivel de aplicacion, lo haces a nivel de componente, es decir que en cada componente especificas cual es son los componentes hijos que va a tener disponible.
Pero recorda que en definitiva todos los componentes (menos el principal), son child (o hijos), ya que los insertas dentro de otros.
Muchas gracias, cabal en el punto.
Antes de empezar el video debo decir, que buena playera 😃
interesante no sabia del global component
Hola como puedo agragar una imagen en vue.js?
Pones la imagen en una carpeta de images dentro de assets y la importas usando la etiqueta img.
Hola como puedo agregar componentes pero en lugar de ser formato .vue que sea .html
Lo que quieres es tener por ejemplo una página estática que sea solo html?
ya arregle el problema con laravel ^^
No me queda claro el por que poner un componente de forma global afecta el rendimiento de la SPA. No se supone que como es una SPA toda la aplicación es cargada en el cliente??
Puede afectar el rendimiento ya que ese componente va a estar cargado en memoria y sin que necesariamente se utilice. Mejor dicho usarlo local en lugar de global seria una optimización de recursos. Esto tiene mas sentido cuando usas tecnicas mas avanzadas como “code splitting” o componentes asincronos. Pero de todos modos puede ayudarte a reducir el tamaño del bundle final evitando cargar cosas que no utilizas.