La base de una aplicación en Vue.js son los componentes. Sin embargo, cuando comenzamos a crear nuestros propios componentes, combinarlos y a usar diferentes componentes dentro de otros nuestra aplicación puede llegar a crecer y terminemos teniendo muchos componentes sin un orden o estructura alguna. En este tutorial aprenderemos algunas técnicas para estructurar y organizar los componentes de nuestra aplicación.
Estructura básica
Al comenzar a trabajar con Vue.js es probable que tengamos una estructura similar a la siguiente:
my-app/ components/ App.vue main.js
Normalmente lo que solemos hacer es almacenar nuestros componentes en el directorio components
. Al comenzar a trabajar con Vue.js es probable que tengamos una estructura similar a la siguiente:
my-app/ components/ ServicesList.vue ServicesPage.vue ServicesMenu.vue App.vue main.js
Hasta aquí todo bien: tenemos un componente principal App.vue
y otros tres componentes que conforman una página de servicios. Pero, ¿Qué sucede cuando inevitablemente tenemos que añadir más componentes o secciones a nuestra aplicación? Probablemente tengamos algo similar a esto:
my-app/ components/ ServicesList.vue ServicesPage.vue ServicesMenu.vue ServicesSidebar.vue CheckoutPage.vue CheckoutList.vue AddToCartButton.vue SiteHeader.vue SiteFooter.vue ... App.vue main.js
Como puedes observar, llega un punto en que nuestro directorio components
crece hasta convertirse en una lista infinita y desorganizada de componentes.
La guía de estilo de Vue.js nos sugiere no utilizar una sola palabra para el nombre del componente.
Categorizando componentes
Dentro del directorio components
de ejemplo puedes observar que tenemos tres tipo de componentes que pertenecen a una misma categoría: listas (List), páginas (Page) y menú (Menu). Por lo tanto, podríamos crear la siguiente estructura partiendo de la categoría de cada componente:
my-app/ components/ pages/ ServicesPage.vue CheckoutPage.vue lists/ ServicesList.vue CheckoutList.vue ServicesMenu.vue ServicesSidebar.vue AddToCartButton.vue SiteHeader.vue SiteFooter.vue ... App.vue main.js
Sin embargo, observa como tenemos dos componentes adicionales que pertenecen a services
: ServicesMenu
y ServicesSidebar
. Por lo que es momento de preguntarnos, ¿tendría más sentido si tuviéramos un directorio dedicado solo para componentes Services
? Podríamos crear un directorio llamado ServicesPage
dentro del directorio pages
:
my-app/ components/ pages/ ServicesPage/ Index.vue ServicesList.vue ServicesMenu.vue ServicesSidebar.vue CheckoutPage/ Index.vue CheckoutList.vue AddToCartButton.vue SiteHeader.vue SiteFooter.vue ... App.vue main.js
¿Mucho mejor, no? Observa que también hemos agregado un directorio CheckoutPage
y hemos renombrado los componentes ServicesPage.vue
y CheckoutPage.vue
a Index.vue
.
Componentes comunes
En nuestro directorio componentes tenemos tres otros componentes: AddToCartButton.vue
, SiteHeader.vue
y SiteFooter.vue
. Veamos a que categoría podrían pertenecer:
AddToCartButton.vue
es un botón que agrega los productos a una lista.SiteHeader.vue
es el encabezado de nuestro sitio.SiteFooter.vue
es el footer de nuestro sitio.
Podríamos decir que AddToCartButton
pertenece a los formularios de nuestra aplicación y SiteHeader
y SiteFooter
pertenecen al layout, por lo tanto, podríamos actualizar la estructura de la siguiente manera:
my-app/ components/ pages/ ServicesPage/ Index.vue ServicesList.vue ServicesMenu.vue ServicesSidebar.vue CheckoutPage/ Index.vue CheckoutList.vue forms/ AddToCartButton.vue layout/ SiteHeader.vue SiteFooter.vue ... App.vue main.js
Como puedes ver, organizar nuestros componentes y poner algo de orden en nuestros directorios no es nada complicado. Un último cambio que podríamos agregar es reusar los componentes de listas, ya que como puedes observar tenemos dos componentes similares CheckoutList
y ServicesList
. Podríamos crear un componente List
que pertenezca a una categoría común y sea reusado por otros componentes:
my-app/ components/ pages/ ServicesPage/ Index.vue ServicesMenu.vue ServicesSidebar.vue CheckoutPage/ Index.vue common/ AppList.vue forms/ AddToCartButton.vue layout/ SiteHeader.vue SiteFooter.vue ... App.vue main.js
Observa como ahora tenemos un componente común llamado AppList
que reemplaza a los dos componentes anteriores que se repetían.
Si tienes alguna duda puedes dejarla en los comentarios y si te ha gustado este tutorial no olvides compartirlo.
Puedes aprender más sobre Vue.js en nuestro Curso de Vue 2.
Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.