window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versión: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster ya existe') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Vue.js mejora de la aplicación. Algunos consejos prácticos - The Codest
The Codest
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Industrias
    • Fintech y Banca
    • E-commerce
    • Adtech
    • Tecnología sanitaria
    • Fabricación
    • Logística
    • Automoción
    • IOT
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
  • Quiénes somos
  • Servicios
    • Desarrollo de software
      • Desarrollo Frontend
      • Desarrollo backend
    • Staff Augmentation
      • Desarrolladores frontales
      • Desarrolladores de backend
      • Ingenieros de datos
      • Ingenieros de la nube
      • Ingenieros de control de calidad
      • Otros
    • Asesoramiento
      • Auditoría y consultoría
  • Valor para
    • CEO
    • CTO
    • Gestor de entregas
  • Nuestro equipo
  • Case Studies
  • Saber cómo
    • Blog
    • Meetups
    • Seminarios en línea
    • Recursos
Carreras profesionales Póngase en contacto
Flecha atrás VOLVER
2020-10-30
Desarrollo de software

Mejora de la aplicación Vue.js. Algunos consejos prácticos

The Codest

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 Codest equipo 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

No quiero repetir lo que ya se ha dicho. Hay una guía de estilo en Vue docs:
Vue 2 docs - guía de estilo o
Vue 3 docs - guía de estilo

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:

<code> <template v-if="condition">
   <div>contenido</div>
   <div>contenido</div>
   <div>contenido</div>
 </template>

Pero, ¿y si queremos hacerlo como elemento raíz? En Vueno podemos utilizar 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:

         
      1. (( item.name ))
      2. ...y veremos un error como este :

        Vue js code

        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.

        Por ejemplo:

        En lugar de un método como este:

        creado() (
        this.fetchArticles();
        ),
        métodos: (
         async fetchArticles() (
          try (
            const datos = await axios.get(url);
            this.articles = data.articles;
            ) catch (e) (
            // manejar error
            )
          )
        )

        Escribe algo como esto - sólo llama al método apropiado que devolverá los resultados de la API:

         async fetchArticles() (
           try (
             this.articles = await ArticlesService.fetchAll();
           ) catch (e) (
             // manejar error
           )
          )

        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:

         export default new VueRouter (
           (
             modo: 'historia
             rutas: [
               (
                 ruta: '/aterrizaje',
                 component: () => import('../pages/p-welcome'),
                 nombre: 'welcome'
               ),
          ...

        En lugar de:

        import PWelcome from '@/pages/p-welcome';
        
        export default nuevo VueRouter (
        (
        modo: 'historia
        rutas: [
        (
        ruta: '/aterrizaje',
        componente: PWelcome, //componente importado
        nombre: 'welcome
        ),

        Carga lenta de componentes Vue

        Una situación similar puede ocurrir con Componentes Vue. Podemos importar perezosamente componentes de un solo archivo de esta manera:

        const lazyComponent = () => import('rutaAComponente.vue')
        exportar por defecto (
        componentes: (lazyComponent )
        )
        
        // Otra sintaxis
        export default (
        componentes: (
        lazyComponent: () => import('rutaAComponente.vue')
        )
        )

        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.

        desarrollo vue js

        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:

        <code> <template>
           <div class="form-group">
             <label :for="id">(( etiqueta ))</label>
             <input
               :id="id"
               :value="value"
               class="base-input"
               @input="$emit('input', $event.target.value)"
             >
           </div>
         </template>

        Ahora, usando el componente de esta manera:

        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.

        <template>
          <div class="form-group">
            <label :for="id">(( etiqueta ))</label>
            <!-- pay attention to v-bind="$attrs" -->
            <input
              :id="id"
              v-bind="$attrs"
              :value="value"
              class="base-input"
              @input="$emit('input', $event.target.value)"
            >
          </div>
        </template>
        
        <script>
        export default (
          name: 'BaseInput',
          inheritAttrs: false, // <- pay attention to this line
          props: ['value', 'label', 'id']
        );
        </script>

        Podemos utilizar v-bind="$attrs" y pasar atributos directamente a 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.

        <template>
          <div class="form-group">
            <label :for="id">(( etiqueta ))</label>
            <!-- pay attention to v-on="listeners" -->
            <input
              :id="id"
              v-bind="$attrs"
              :value="value"
              class="base-input"
              v-on="listeners"
            >
        </div>
        </template>
        
        <script>
        export default (
          name: 'BaseInput',
          inheritAttrs: false,
          props: ['value', 'label', 'id'],
          computed: (
            listeners() (
              return (
                ...this.$listeners,
                input: event => this.$emit('input', event.target.value)
              );
            )
          )
        );
        </script>

        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:

        La versión anterior es mejor porque otro método no es necesario, sólo nombramos un método que debe ser llamado para cambiar watchedProperty.

        Un enfoque aún mejor:

        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.

        Más información:

        JavaScript está totalmente muerto. Un tipo en Internet

        Una mirada más profunda a los ganchos React más populares

        Proyectos de software en los que puede utilizar JavaScript

  • Artículos relacionados

    Desarrollo de software

    Crear aplicaciones web preparadas para el futuro: ideas del equipo de expertos de The Codest

    Descubra cómo The Codest destaca en la creación de aplicaciones web escalables e interactivas con tecnologías de vanguardia, ofreciendo experiencias de usuario fluidas en todas las plataformas. Descubra cómo nuestra experiencia impulsa la transformación...

    EL MEJOR
    Desarrollo de software

    Las 10 mejores empresas de desarrollo de software de Letonia

    Conozca las principales empresas de desarrollo de software de Letonia y sus innovadoras soluciones en nuestro último artículo. Descubra cómo estos líderes tecnológicos pueden ayudarle a mejorar su negocio.

    thecodest
    Soluciones para empresas y escalas

    Fundamentos del desarrollo de software Java: Guía para externalizar con éxito

    Explore esta guía esencial sobre el desarrollo de software Java outsourcing con éxito para mejorar la eficiencia, acceder a la experiencia e impulsar el éxito de los proyectos con The Codest.

    thecodest
    Desarrollo de software

    La guía definitiva para subcontratar en Polonia

    El auge de las outsourcing en Polonia está impulsado por los avances económicos, educativos y tecnológicos, que fomentan el crecimiento de las TI y un clima favorable a las empresas.

    TheCodest
    Soluciones para empresas y escalas

    Guía completa de herramientas y técnicas de auditoría informática

    Las auditorías informáticas garantizan sistemas seguros, eficientes y conformes. Obtenga más información sobre su importancia leyendo el artículo completo.

    The Codest
    Jakub Jakubowicz CTO y Cofundador

    Suscríbase a nuestra base de conocimientos y manténgase al día de la experiencia del sector informático.

      Quiénes somos

      The Codest - Empresa internacional de desarrollo de software con centros tecnológicos en Polonia.

      Reino Unido - Sede central

      • Oficina 303B, 182-184 High Street North E6 2JA
        Londres, Inglaterra

      Polonia - Centros tecnológicos locales

      • Parque de oficinas Fabryczna, Aleja
        Pokoju 18, 31-564 Cracovia
      • Embajada del Cerebro, Konstruktorska
        11, 02-673 Varsovia, Polonia

        The Codest

      • Inicio
      • Quiénes somos
      • Servicios
      • Case Studies
      • Saber cómo
      • Carreras profesionales
      • Diccionario

        Servicios

      • Asesoramiento
      • Desarrollo de software
      • Desarrollo backend
      • Desarrollo Frontend
      • Staff Augmentation
      • Desarrolladores de backend
      • Ingenieros de la nube
      • Ingenieros de datos
      • Otros
      • Ingenieros de control de calidad

        Recursos

      • Hechos y mitos sobre la cooperación con un socio externo de desarrollo de software
      • De EE.UU. a Europa: ¿Por qué las startups estadounidenses deciden trasladarse a Europa?
      • Comparación de los polos de desarrollo de Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filipinas), Eurasia (Turquía)
      • ¿Cuáles son los principales retos de los CTO y los CIO?
      • The Codest
      • The Codest
      • The Codest
      • Privacy policy
      • Condiciones de uso del sitio web

      Copyright © 2025 por The Codest. Todos los derechos reservados.

      es_ESSpanish
      en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean nl_NLDutch etEstonian elGreek es_ESSpanish