window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } 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 miglioramento delle app. Alcuni consigli pratici - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2020-10-30
Sviluppo di software

Miglioramento dell'applicazione Vue.js. Alcuni consigli pratici

The Codest

Dominik Grzedzielski

Senior Software Engineer

Vue è un framework progressivo in rapida crescita per la costruzione di interfacce utente. È diventato il framework JavaScript con il maggior numero di stelle su GitHub e il progetto con più stelle del 2016 e del 2017 sullo stesso portale.

Creare applicazioni in Vue è davvero semplice in quanto tale, ma se si vuole costruire applicazioni di buona qualità, la sfida è un po' più ardua.

Essere parte di The Codest squadra e vero sostenitore di Tecnologia VueVoglio condividere con voi alcuni suggerimenti (non copiato dalla documentazione ufficiale dell'Vue) che migliorerà senza sforzo codice qualità e la prestazioni delle applicazioni Vue.

Per prima cosa, applicare la Guida allo stile Vue e ESLint

Non voglio ripetere ciò che è già stato detto. C'è una guida allo stile nei documenti dell'Vue:
Vue 2 documentazione - guida di stile o
Vue 3 documentazione - guida di stile

Sono presenti quattro categorie di Regole. Tre di queste ci interessano davvero:

  • Essenziale regole che ci impediscono di commettere errori,
  • Consigliato e fortemente raccomandato regole per il mantenimento delle migliori pratiche - per migliorare la qualità e la leggibilità del codice.

Potreste pensare: "Cosa?! Devo ricordare ogni regola?". Certo che no. Potete usare ESLint per occuparsi di queste regole. Basta impostare tutto correttamente nel file di configurazione di ESLint. Suggerisco di utilizzare il metodo raccomandato preimpostato perché si ottiene un insieme totalmente gratuito di regole che aiutano a costruire applicazioni con buone pratiche. Come configurarlo?

Per impostazione predefinita, si dovrebbe trovare si estende nella configurazione di ESLint e sostituire "plugin:vue/essential" con "plugin:vue/raccomandato", tutto qui.

Naturalmente, ci sono alcune regole da ricordare, perché ESLint non può gestire tutto da solo. Per esempio:

  • denominazione coerente,
  • denominazione degli eventi in kebab-case,
  • prefisso $_namespace_ proprietà private in plugin, mixin, ecc,
  • ordine degli elementi di primo livello di un singolo file.

Non utilizzare più v-if

A volte può essere necessario rendere condizionatamente più di un elemento, ma spesso si scrive qualcosa del genere:

contenuto

contenuto

contenuto

Non è necessario perché possiamo scriverlo in modo più elegante:

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

Ma cosa succede se vogliamo farlo come elemento radice? In Vue, non possiamo usare per questo scopo. In alcuni casi, potrebbe essere sufficiente un involucro in div.

Va bene, ma, per quanto possiamo volerlo, a volte non possiamo avvolgere gli elementi in un div, per esempio, a causa della semantica dell'html (per esempio.

  • deve essere un figlio diretto di
      o
        ). Quindi, quando dobbiamo scrivere:

         
      1. (( item.name ))
      2. ...e vedremo un errore come questo:

        Codice js Vue

        Possiamo affrontarlo utilizzando JSX e un componente funzionale, inoltre dovremmo passare un booleano e questo sostituirà il v-if.

        Non scrivere gestori di chiamate api nei componenti

        In realtà, questo è solo uno degli esempi di ciò che non si dovrebbe fare nei componenti. È sufficiente fare ciò che è localmente necessario nella logica dei componenti. Ogni metodo che potrebbe essere esterno dovrebbe essere separato e richiamato solo nei componenti, ad esempio nella logica aziendale.

        Esempio:

        Invece di un metodo come questo:

        created() (
        this.fetchArticles();
        ),
        metodi: (
         async fetchArticles() (
          try (
            const data = await axios.get(url);
            this.articles = data.articles;
            ) catch (e) (
            // gestisce l'errore
            )
          )
        )

        Scrivete qualcosa di simile: basta chiamare il metodo appropriato che restituirà i risultati dell'API:

         async fetchArticles() (
           try (
             this.articles = await ArticlesService.fetchAll();
           ) catch (e) (
             // gestisce l'errore
           )
          )

        Utilizzare slot invece di grandi quantità di oggetti di scena

        A volte l'uso dei puntelli è sufficiente, ma ci sono anche casi in cui non sono efficienti. Può capitare di dover aggiungere troppi oggetti di scena per far funzionare il componente come vogliamo. L'esempio più semplice potrebbe essere quello di un componente pulsante. Senza dubbio, è un componente che può essere usato ovunque in un'applicazione. Consideriamo quindi un componente pulsante come questo.

        
        (( testo ))

        In questa fase, si tratta di un semplice componente che accetta solo prop di testo. Va bene, ma potrebbe non essere sufficiente, perché avremo bisogno di icone nel pulsante. In questo caso, dobbiamo aggiungere altri 2 oggetti di scena (2, perché vogliamo avere l'opzione di aggiungere prima o dopo il testo). Quindi, il componente avrà questo aspetto:

        
        (( testo ))

        Non è male, abbiamo solo 3 puntelli, ma...

        E se avessimo bisogno di un indicatore di carico? Dovremmo aggiungere un altro oggetto. E questo per ogni nuova funzionalità! Tenere il passo con la crescita del numero di componenti è una sfida? Sì, decisamente sì!

        Utilizziamo invece gli slot.

        Più semplice, vero? Ok, ma come possiamo ottenere la funzione di aggiunta di icone? È molto semplice! Basta utilizzare il componente in questo modo:

        Indietro
        
        Avanti

        Un modo semplice per migliorare le prestazioni

        Condividerò con voi alcuni consigli davvero facili da mettere in pratica, in modo che possiate trarne immediatamente beneficio.

        Percorsi a caricamento pigro

        A volte le rotte sono disponibili solo per gli amministratori o per gli utenti con un accesso particolare e possono anche essere visitate meno di altre. Sono casi perfetti per l'uso del percorso di caricamento pigro.

        È sufficiente utilizzare la funzione freccia nella proprietà del componente per restituire la funzione di importazione:

         export default new VueRouter (
           (
             modalità: 'storia',
             rotte: [
               (
                 percorso: '/landing',
                 component: () => import('../pages/p-welcome'),
                 nome: 'benvenuto'
               ),
          ...

        Invece di:

        importare PWelcome da '@/pages/p-welcome';
        
        esportazione predefinita nuovo VueRouter (
        (
        modalità: 'storia',
        rotte: [
        (
        percorso: '/landing',
        componente: PWelcome, //appena importato il componente
        nome: 'welcome'
        ),

        Caricamento pigro dei componenti Vue

        Una situazione simile può verificarsi con Componenti Vue. Possiamo importare pigramente i componenti di un singolo file in questo modo:

        const lazyComponent = () => import('pathToComponent.vue')
        esportare l'impostazione predefinita (
        componenti: (lazyComponent )
        )
        
        // Un'altra sintassi
        Esportazione di default (
        componenti: (
        lazyComponent: () => import('pathToComponent.vue')
        )
        )

        Grazie al caricamento pigro del componente, questo verrà scaricato solo quando richiesto. Ad esempio, se abbiamo un componente con v-if, questo verrà richiesto solo se il componente deve essere reso. Quindi, a meno che il valore v-if non sia vero, il componente non verrà caricato. Per questo motivo, l'importazione pigra può essere usata anche per JavaScript file.

        Bonus: Quando si utilizza Vue CLI 3+, ogni risorsa caricata pigramente viene prefissata per impostazione predefinita!

        sviluppo vue js

        Utilizzare wrapper trasparenti al posto dei puntelli degli attributi

        Considerate un componente come questo:

        Senza problemi, possiamo usarlo in questo modo:

        o


        Funziona, perché Vue consente di passare attributi html al componente, anche se non sono stati dichiarati come oggetti di scena. Gli attributi html vengono applicati all'elemento radice del componente (input, in questo caso).

        Il problema si presenta quando si vuole espandere il componente di input, che potrebbe apparire come questo:

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

        Ora, utilizzando il componente in questo modo:

        non funzionerà come vogliamo, perché il tipo e il segnaposto saranno applicati a div (elemento radice) e questo non ha senso. Quindi, dobbiamo occuparcene, perché vogliamo aggiungere i nostri attributi all'elemento di input. Il primo pensiero potrebbe essere: "Aggiungiamo gli oggetti di scena di cui abbiamo bisogno!" e ovviamente funzionerà, ma... cosa succede se vogliamo usare tipo, completamento automatico, segnaposto, autofocus, disabilitato, modalità di ingressoecc., quindi dobbiamo definire gli oggetti di scena per ogni attributo html. Personalmente non mi piace questo metodo lungo, quindi cerchiamo qualcosa di meglio!

        Possiamo affrontare l'intero problema in solo due righe.

        <template>
          <div class="form-group">
            <label :for="id">(( etichetta ))</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>

        Possiamo utilizzare v-bind="$attrs" e passare gli attributi direttamente a senza dichiarare enormi quantità di oggetti di scena. Inoltre, ricordatevi di aggiungere l'opzione inheritAttrs: false per disabilitare il passaggio degli attributi all'elemento radice. Andiamo un po' più in là: e se avessimo bisogno di aggiungere degli ascoltatori di eventi a questo input? Anche in questo caso, potrebbe essere gestito da oggetti di scena o eventi personalizzati, ma c'è una soluzione migliore.

        <template>
          <div class="form-group">
            <label :for="id">(( etichetta ))</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>

        C'è una nuova proprietà calcolata che restituisce il componente per gli ascoltatori e aggiunge l'ascoltatore di input. Si utilizza l'input calcolato, scrivendo semplicemente v-on="ascoltatori".

        Usare l'osservatore con l'opzione immediata invece del gancio e dell'osservatore creati insieme

        Spesso si recuperano alcuni dati su un hook creato (o montato), ma poi occorre recuperare quei dati a ogni modifica di una proprietà, ad esempio la pagina corrente della paginazione. Alcuni tendono a scriverlo in questo modo:

        Certo, funziona, ma... non è l'approccio migliore, nemmeno uno buono. Quindi, verifichiamo come possiamo rifattorizzare questo, un esempio di approccio non così cattivo:

        La versione precedente è migliore perché non è necessario un altro metodo, ma solo un metodo che deve essere richiamato per modificare watchedProperty.

        Un approccio ancora migliore:

        Abbiamo eliminato il gancio created. Aggiungendo l'opzione 'immediate', facciamo in modo che il componente chiami il metodo fetchData subito dopo l'inizio dell'osservazione (un po' prima del gancio created e dopo beforeCreated), in modo da poterlo usare al posto del gancio created.

        Sintesi dei suggerimenti Vue.js

        Questi suggerimenti non renderanno la vostra applicazione perfetta, ma il loro utilizzo vi consentirà di migliorare la qualità del codice. Inoltre, spero che troverete qualcosa di interessante negli esempi precedenti.

        Si noti che alcuni di essi sono stati semplificati ai fini dell'articolo.

        Per saperne di più:

        L'JavaScript è completamente morto. Un tizio su Internet

        Uno sguardo più approfondito ai ganci React più popolari

        Progetti software in cui è possibile utilizzare JavaScript

  • Articoli correlati

    Sviluppo di software

    Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

    Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

    IL CANCRO
    Sviluppo di software

    Le 10 principali aziende di sviluppo software con sede in Lettonia

    Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

    thecodest
    Soluzioni per aziende e scaleup

    Essenziali di sviluppo software Java: Guida all'outsourcing di successo

    Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

    thecodest
    Sviluppo di software

    La guida definitiva all'outsourcing in Polonia

    L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

    IlCodesto
    Soluzioni per aziende e scaleup

    Guida completa agli strumenti e alle tecniche di audit IT

    Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

    The Codest
    Jakub Jakubowicz CTO e cofondatore

    Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

      Chi siamo

      The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

      Regno Unito - Sede centrale

      • Ufficio 303B, 182-184 High Street North E6 2JA
        Londra, Inghilterra

      Polonia - Poli tecnologici locali

      • Parco uffici Fabryczna, Aleja
        Pokoju 18, 31-564 Cracovia
      • Ambasciata del cervello, Konstruktorska
        11, 02-673 Varsavia, Polonia

        The Codest

      • Casa
      • Chi siamo
      • Servizi
      • Case Studies
      • Sapere come
      • Carriera
      • Dizionario

        Servizi

      • Consulenza
      • Sviluppo di software
      • Sviluppo backend
      • Sviluppo Frontend
      • Staff Augmentation
      • Sviluppatori backend
      • Ingegneri del cloud
      • Ingegneri dei dati
      • Altro
      • Ingegneri QA

        Risorse

      • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
      • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
      • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
      • Quali sono le principali sfide di CTO e CIO?
      • The Codest
      • The Codest
      • The Codest
      • Privacy policy
      • Condizioni di utilizzo del sito web

      Copyright © 2025 di The Codest. Tutti i diritti riservati.

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