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.vuees un botón que agrega los productos a una lista.SiteHeader.vuees el encabezado de nuestro sitio.SiteFooter.vuees 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.
