Mejora de la aplicación Vue.js. Algunos consejos prácticos
Dominik Grzedzielski
Senior Software Engineer
Vue es un framework progresivo de rápido crecimiento para la creación de interfaces de usuario. Se ha convertido en el framework JavaScript con más estrellas en GitHub y en el proyecto con más estrellas de 2016 y 2017 en el mismo portal.
Creación de aplicaciones en Vue es realmente sencillo como tal, pero si quieres crear aplicaciones de buena calidad, te espera un reto un poco mayor.
Formar parte de The Codestequipo y verdadero defensor de Tecnología VueQuiero compartir algunas consejos (no copiado de los documentos oficiales Vue) que mejorará sin esfuerzo código calidad y la rendimiento de las aplicaciones Vue.
En primer lugar, aplique la Guía de Estilo Vue y ESLint
Existen cuatro categorías de normas. A nosotros nos interesan tres de ellas:
Esencial normas que nos impiden cometer errores,
Recomendado y muy recomendable normas para mantener las mejores prácticas - para mejorar la calidad y legibilidad del código.
Puede que pienses... "¡¿Qué?! ¿Tengo que recordar todas las reglas?". Por supuesto que no. Puedes usar ESLint para que se encargue de esas reglas por ti. Sólo tienes que configurar todo correctamente en el archivo de configuración de ESLint. Sugiero utilizar el recomendado preajustado ya que obtendrás un conjunto de reglas totalmente gratuitas que te ayudarán a crear aplicaciones con buenas prácticas. ¿Cómo configurarlo?
Por defecto, debería encontrar extiende en la configuración de ESLint y sustituya "plugin:vue/essential" con "plugin:vue/recomendado"Eso es todo.
Por supuesto, hay algunas reglas que debe recordar, porque ESLint no puede manejar todo por sí mismo. Por ejemplo:
nomenclatura coherente,
nomenclatura de eventos en kebab-case,
prefijación $_espacio_de_nombres propiedades privadas en plugins, mixins, etc.,
orden de los elementos de nivel superior del componente de archivo único.
No utilice varios v-if
A veces puede ser necesario renderizar condicionalmente más de 1 elemento, pero la gente suele escribir algo así:
contenido
contenido
contenido
Es innecesario porque podemos escribirlo de forma más elegante:
Pero, ¿y si queremos hacerlo como elemento raíz? En Vueno podemos utilizar <template> para este fin. En algunos casos, envolver en div podría ser suficiente.
Eso está bien, pero, por mucho que queramos, a veces no podemos envolver elementos en div, por ejemplo, debido a la semántica html (p.ej. tiene que ser hijo directo de
o ). Así que cuando tenemos que escribir:
(( item.name ))
...y veremos un error como este :
Podemos hacerle frente utilizando JSX y un componente funcional, también debemos pasar un booleano y reemplazará al v-if.
</>
No escriba manejadores de llamadas api en componentes
En realidad, este es sólo uno de los ejemplos de lo que no se debe hacer en los componentes. Simplemente haz lo que sea localmente necesario en la lógica de los componentes. Cada método que podría ser externo debe ser separado y sólo se llama en los componentes, por ejemplo, la lógica de negocio.
Utilizar ranuras en lugar de grandes cantidades de accesorios
A veces usar props es suficiente, pero también hay casos en los que no son eficientes. Puede ocurrir en situaciones en las que tendríamos que añadir demasiados props para que el componente funcione como queremos. El ejemplo más sencillo podría ser un componente botón. Sin duda, es un componente que se puede utilizar en cualquier parte de una aplicación. Así que, consideremos un componente botón como este.
(( texto ))
En esta etapa, es un simple componente que sólo acepta texto prop. Bien, pero puede no ser suficiente ya que necesitaremos iconos en el botón. En este caso, tenemos que añadir otros 2 props (2, porque queremos tener la opción de añadir antes o después del texto). Así, el componente se verá así:
(( texto ))
No está mal, sólo tenemos 3 puntales, pero...
¿Y si necesitamos un indicador de carga? Pues tendríamos que añadir otro accesorio. ¡Y eso para cada nueva función! ¿Le parece un reto mantener el ritmo de crecimiento del número de componentes? Sí, sin duda.
Utilicemos ranuras en su lugar.
Más sencillo, ¿verdad? Vale, pero ¿cómo podemos conseguir la función de añadir iconos? Es muy fácil. Sólo tienes que utilizar el componente de esta manera:
Volver
Siguiente
Una forma sencilla de mejorar el rendimiento
Voy a compartir contigo algunos consejos que son realmente fáciles de poner en práctica, para que puedas beneficiarte al instante.
Rutas de carga perezosa
A veces tenemos rutas que sólo están disponibles para los administradores, o usuarios con un acceso particular, que también pueden ser menos visitadas que otras. Son casos perfectos para usar la ruta lazy load.
Sólo tiene que utilizar la función de flecha en la propiedad de su componente para devolver la función de importación:
Gracias a la carga perezosa de ese componente, se descargará sólo cuando se solicite. Por ejemplo, si tenemos un componente con v-if, sólo se solicitará si el componente se va a renderizar. Así que a menos que el valor v-if sea verdadero, el componente no será cargado. Es por eso que la importación perezosa también se puede utilizar para JavaScript archivos.
Bonificación: Cuando se utiliza Vue CLI 3+, todos los recursos cargados perezosamente se precargan por defecto.
Utilizar envoltorios transparentes en lugar de atributos
Considere un componente como éste:
Sin problemas, podemos usarlo así:
o
Funciona porque Vue le permite pasar atributos html al componente, aunque no los haya declarado como props. Los atributos html se aplican al elemento raíz del componente (input, en este caso).
El problema aparece cuando queremos ampliar nuestro componente de entrada, ya que podría tener este aspecto:
no funcionará como queremos, porque el tipo y el marcador de posición se aplicarán a div (elemento raíz) y eso no tiene sentido. Por lo tanto, tenemos que tratar con él, porque queremos añadir nuestros atributos al elemento de entrada. Tu primer pensamiento puede ser "¡añadamos los atributos que necesitamos!" y por supuesto que funcionará, pero... ¿qué pasa si queremos usar tipo, autocompletar, marcador de posición, autofocus, desactivado, inputmodeetc., entonces tenemos que definir los props para cada atributo html. Personalmente no me gusta este método tan largo, ¡así que busquemos algo mejor!
Podemos tratar todo el problema en sólo dos líneas.
Podemos utilizar v-bind="$attrs" y pasar atributos directamente a <input> sin declarar grandes cantidades de accesorios. Además, recuerde sobre la adición de la opción heredarAttrs: false para deshabilitar el paso de los atributos al elemento raíz. Vayamos un poco más allá: ¿qué pasa si necesitamos añadir escuchadores de eventos a esta entrada? De nuevo, podría ser manejado por props o eventos personalizados, pero hay una solución mejor.
Hay una nueva propiedad computada que devuelve el componente para los oyentes y añade el oyente de entrada. Usamos esa entrada computada simplemente escribiendo v-on="oyentes".
Utilizar el observador con la opción inmediata en lugar del gancho creado y el observador juntos
A menudo obtenemos algunos datos en un hook creado (o montado), pero luego necesitamos obtener esos datos con cada cambio de una propiedad, por ejemplo, la página actual de la paginación. Algunos tienden a escribirlo así
Por supuesto, funciona, pero... No es el mejor enfoque, ni siquiera uno bueno. Por lo tanto, vamos a ver cómo podemos refactorizar esto, Un ejemplo de no tan mal enfoque:
Nos deshacemos del gancho created. Al añadir la opción 'immediate', hacemos que ese componente llame al método fetchData inmediatamente después del inicio de la observación (es un poco antes del gancho created y después de beforeCreated), por lo que se puede utilizar en lugar del gancho created.
Vue.js consejos resumen
Estos consejos no harán que su solicitud sea perfecta, pero si los utiliza, lo hará rápidamente. mejore la calidad de su código. Además, espero que encuentre algo de interés en los ejemplos anteriores.
Tenga en cuenta que algunos de ellos se han simplificado para los fines del artículo.