window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes allerede') } 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 }) }, } } })() Forbedring af Vue.js-appen. Nogle praktiske tips - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2020-10-30
Udvikling af software

Forbedring af Vue.js-appen. Nogle praktiske tips

Codest

Dominik Grzedzielski

Senior Software Engineer

Vue er et hurtigt voksende progressivt framework til opbygning af brugergrænseflader. Det blev det JavaScript-framework med flest stjerner på GitHub og det mest stjernespækkede projekt i 2016 og 2017 på samme portal.

Oprettelse af applikationer i Vue er som sådan meget enkel, men hvis du vil bygge applikationer af god kvalitet, er du klar til lidt mere af en udfordring.

At være en del af Codest hold og ægte fortaler for Vue-teknologivil jeg gerne dele nogle Tips (ikke kopieret fra officielle Vue-dokumenter), som uden problemer vil forbedre Kode kvalitet og den ydeevne for Vue-applikationer.

Først skal du anvende Vue Style Guide og ESLint

Jeg vil ikke gentage, hvad der allerede er blevet sagt. Der er en stilguide i Vue-dokumenterne:
Vue 2 docs - stilguide eller
Vue 3 docs - stilguide

Du kan finde fire regelkategorier. Vi er virkelig interesserede i tre af dem:

  • Væsentligt regler, der forhindrer os i at begå fejl,
  • Anbefalet og anbefales kraftigt regler for opretholdelse af bedste praksis - til forbedre kvaliteten og læsbarheden af koden.

Du tænker måske ... "Hvad?! Skal jeg huske alle regler?" Selvfølgelig skal du ikke det. Du kan bruge ESLint til at tage sig af de regler for dig. Du skal bare indstille alt korrekt i ESLints konfigurationsfil. Jeg foreslår, at du bruger anbefales Forudindstillet da du får et helt gratis sæt regler, der hjælper dig med at bygge apps med god praksis. Hvordan sætter man det op?

Som standard bør du finde strækker sig i ESLint-konfigurationen og erstat "plugin:vue/essential" med "plugin:vue/anbefalet"Det er alt.

Der er selvfølgelig et par regler, du skal huske, for ESLint kan ikke klare alt på egen hånd. For eksempel:

  • konsekvent navngivning,
  • navngivning af begivenheder i kebab-bogstaver,
  • præfiks $_navneområde_. private egenskaber i plugins, mixins osv,
  • enkelt filkomponent på øverste niveau elementrækkefølge.

Brug ikke flere v-if

Det kan nogle gange være nødvendigt at gøre mere end 1 element betinget, men folk skriver ofte noget i den retning:

indhold

indhold

indhold

Det er unødvendigt, fordi vi kan skrive det mere elegant:

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

Men hvad nu, hvis vi vil gøre det som et rodelement? I Vuekan vi ikke bruge . til dette formål. I nogle tilfælde kan indpakning i div være nok.

Det er ok, men selv om vi gerne vil, kan vi nogle gange ikke pakke elementer ind i div, for eksempel på grund af html-semantik (f.eks.

  • . skal være et direkte barn af
      . eller
        .). Så når vi skal skrive:

         
      1. (( element.navn ))
      2. ... og vi vil se en fejl som denne:

        Vue js-kode

        Vi kan håndtere det ved at ved hjælp af JSX og en funktionel komponentVi skal også sende en boolean, og den vil erstatte v-if.

        Skriv ikke api-kaldshåndteringer i komponenter

        Faktisk er dette kun et af eksemplerne på, hvad man ikke bør gøre i komponenter. Gør blot, hvad der er lokalt nødvendigt i komponenternes logik. Alle metoder, der kan være eksterne, bør adskilles og kun kaldes i komponenter, f.eks. forretningslogik.

        Et eksempel:

        I stedet for en metode som denne:

        created() (
        this.fetchArticles();
        ),
        metoder: (
         async fetchArticles() (
          prøv (
            const data = await axios.get(url);
            this.articles = data.articles;
            ) catch (e) (
            // håndterer fejl
            )
          )
        )

        Skriv noget i stil med dette - bare kald den rigtige metode, der vil returnere API-resultater:

         async fetchArticles() (
           prøv (
             this.articles = await ArticlesService.fetchAll();
           ) catch (e) (
             // håndterer fejl
           )
          )

        Brug slots i stedet for store mængder rekvisitter

        Nogle gange er det nok at bruge props, men der er også tilfælde, hvor de ikke er effektive. Det kan ske i situationer, hvor vi er nødt til at tilføje for mange props for at få komponenten til at fungere, som vi vil have det. Det simpleste eksempel kunne være en knapkomponent. Det er uden tvivl en komponent, som kan bruges overalt i en applikation. Så lad os se på en knapkomponent som denne.

        
        (( tekst ))

        På dette stadie er det en simpel komponent, som kun accepterer tekstprop. Ok, men det er måske ikke nok, da vi får brug for ikoner i knappen. I dette tilfælde skal vi tilføje yderligere 2 rekvisitter (2, fordi vi vil have mulighed for at tilføje før eller efter tekst). Så komponenten kommer til at se sådan ud:

        
        (( tekst ))

        Det er ikke dårligt, vi har kun tre rekvisitter, men...

        Hvad hvis vi har brug for en belastningsindikator? Så er vi nødt til at tilføje endnu en prop. Og det er for hver eneste nye funktion! Lyder det udfordrende at holde trit med væksten i antallet af komponenter? Ja, det gør det helt sikkert!

        Lad os bruge slots i stedet.

        Enklere, ikke? Ok, men hvordan kan vi få funktionen med at tilføje ikoner? Det er virkelig nemt! Du skal bare bruge komponenten sådan her:

        Tilbage
        
        Næste

        Nem måde at forbedre performance på

        Jeg vil dele nogle tips med dig, som er virkelig nemme at implementere, så du kan få gavn af dem med det samme.

        Lazy load-ruter

        Nogle gange har vi ruter, der kun er tilgængelige for administratorer eller brugere med særlig adgang, og de bliver måske også besøgt mindre end andre. De er perfekte tilfælde til at bruge lazy load-ruten.

        Du skal bare bruge pilfunktionen i din komponentegenskab til at returnere importfunktionen:

         export default new VueRouter (
           (
             tilstand: 'historie',
             routes: [
               (
                 sti: '/landing',
                 component: () => import('../pages/p-welcome'),
                 navn: 'velkommen'
               ),
          ...

        I stedet for:

        import PWelcome fra '@/pages/p-welcome';
        
        export default new VueRouter (
        (
        tilstand: 'historie',
        routes: [
        (
        sti: '/landing',
        komponent: PWelcome, //jeg har lige importeret komponenten
        navn: 'velkommen'
        ),

        Doven indlæsning af Vue-komponenter

        En lignende situation kan opstå med Vue-komponenter. Vi kan dovent importere komponenter fra en enkelt fil på denne måde:

        const lazyComponent = () => import('pathToComponent.vue')
        eksport standard (
        komponenter: (lazyComponent )
        )
        
        // En anden syntaks
        eksport standard (
        komponenter: (
        lazyComponent: () => import('pathToComponent.vue')
        )
        )

        Takket være den dovne indlæsning af komponenten bliver den kun downloadet, når der anmodes om det. Hvis vi f.eks. har en komponent med v-if, vil der kun blive anmodet om den, hvis komponenten skal gengives. Så medmindre v-if-værdien er true, vil komponenten ikke blive indlæst. Derfor kan doven import også bruges til JavaScript filer.

        Bonus: Når du bruger Vue CLI 3+, bliver alle dovent indlæste ressourcer forudindlæst som standard!

        vue js-udvikling

        Brug gennemsigtige wrappers i stedet for attribut-props

        Tænk på en komponent som denne:

        Uden problemer kan vi bruge det sådan her:

        eller


        Det virker, fordi Vue giver dig mulighed for at sende html-attributter til komponenten, selv om du ikke har erklæret dem som props. Html-attributterne anvendes på komponentens rodelement (input i dette tilfælde).

        Problemet opstår, når vi vil udvide vores inputkomponent, da den kunne se sådan ud:

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

        Brug nu komponenten på denne måde:

        vil ikke fungere, som vi ønsker, fordi typen og pladsholderen vil blive anvendt på div (rodelementet), og det giver ingen mening. Så vi er nødt til at håndtere det, fordi vi ønsker at tilføje vores attributter til input-elementet. Din første tanke er måske "lad os tilføje de rekvisitter, vi har brug for!", og det vil selvfølgelig fungere, men ... hvad nu, hvis vi vil bruge type, autofuldførelse, pladsholder, autofokus, handicappede, inputmodeosv., så er vi nødt til at definere props for hver html-attribut. Personligt bryder jeg mig ikke om denne lange metode, så lad os finde noget bedre!

        Vi kan håndtere hele problemet i kun to linjer.

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

        Vi kan bruge v-bind="$attrs" og sende attributter direkte til . uden at deklarere store mængder rekvisitter. Husk også at tilføje muligheden inheritAttrs: false for at deaktivere overførsel af attributterne til rodelementet. Lad os gå lidt videre: Hvad nu, hvis vi skal tilføje event-lyttere til dette input? Igen kan det håndteres af props eller brugerdefinerede events, men der er en bedre løsning.

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

        Der er en ny beregnet egenskab, som returnerer komponenten til lyttere og tilføjer input-lytteren. Vi bruger det beregnede input ved blot at skrive v-on="lyttere".

        Brug watcher med immediate option i stedet for den oprettede hook og watcher sammen

        Vi henter ofte nogle data på en oprettet (eller monteret) hook, men så har vi brug for at hente disse data ved hver ændring af en egenskab, f.eks. den aktuelle side i en paginering. Nogle har en tendens til at skrive det ned sådan her:

        .

        Selvfølgelig virker det, men... Det er ikke den bedste tilgang, ikke engang en god en. Så lad os se, hvordan vi kan refaktorere dette, et eksempel på en ikke så dårlig tilgang:

        .

        Ovenstående version er bedre, fordi det ikke er nødvendigt med endnu en metode, vi har kun navngivet en metode, der skal kaldes på for at ændre watchedProperty.

        En endnu bedre tilgang:

        .

        Vi er sluppet af med created-krogen. Ved at tilføje indstillingen 'immediate' får vi komponenten til at kalde fetchData-metoden umiddelbart efter observationens start (det er lidt før created-krogen og efter beforeCreated), så den kan bruges i stedet for created-krogen.

        Oversigt over tips til Vue.js

        Disse tips vil ikke gøre din ansøgning perfekt, men hvis du bruger dem, går det hurtigt. forbedre kvaliteten af din kode. Jeg håber også, at du vil finde noget af interesse i ovenstående eksempler.

        Bemærk, at nogle af dem er blevet forenklet til artiklens formål.

        Læs mere om det:

        JavaScript er fuldstændig død. En fyr på internettet

        Et dybere kig på de mest populære React-kroge

        Softwareprojekter, hvor du kan bruge JavaScript

  • Relaterede artikler

    Udvikling af software

    Byg fremtidssikrede webapps: Indsigt fra The Codest's ekspertteam

    Oplev, hvordan The Codest udmærker sig ved at skabe skalerbare, interaktive webapplikationer med banebrydende teknologier, der leverer sømløse brugeroplevelser på tværs af alle platforme. Lær, hvordan vores ekspertise driver digital transformation og...

    DENKODEST
    Udvikling af software

    Top 10 Letlands-baserede softwareudviklingsvirksomheder

    Læs om Letlands bedste softwareudviklingsvirksomheder og deres innovative løsninger i vores seneste artikel. Find ud af, hvordan disse teknologiledere kan hjælpe med at løfte din virksomhed.

    thecodest
    Løsninger til virksomheder og scaleups

    Grundlæggende om Java-softwareudvikling: En guide til succesfuld outsourcing

    Udforsk denne vigtige guide til vellykket outsourcing af Java-softwareudvikling for at forbedre effektiviteten, få adgang til ekspertise og skabe projektsucces med The Codest.

    thecodest
    Udvikling af software

    Den ultimative guide til outsourcing i Polen

    Den voldsomme stigning i outsourcing i Polen er drevet af økonomiske, uddannelsesmæssige og teknologiske fremskridt, der fremmer it-vækst og et erhvervsvenligt klima.

    TheCodest
    Løsninger til virksomheder og scaleups

    Den komplette guide til IT-revisionsværktøjer og -teknikker

    IT-revisioner sikrer sikre, effektive og kompatible systemer. Lær mere om deres betydning ved at læse hele artiklen.

    Codest
    Jakub Jakubowicz CTO og medstifter

    Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

      Om os

      The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

      Storbritannien - Hovedkvarter

      • Kontor 303B, 182-184 High Street North E6 2JA
        London, England

      Polen - Lokale teknologiske knudepunkter

      • Fabryczna Office Park, Aleja
        Pokoju 18, 31-564 Kraków
      • Hjerneambassaden, Konstruktorska
        11, 02-673 Warszawa, Polen

        Codest

      • Hjem
      • Om os
      • Serviceydelser
      • Casestudier
      • Ved hvordan
      • Karriere
      • Ordbog

        Serviceydelser

      • Det rådgivende
      • Udvikling af software
      • Backend-udvikling
      • Frontend-udvikling
      • Staff Augmentation
      • Backend-udviklere
      • Cloud-ingeniører
      • Dataingeniører
      • Andet
      • QA-ingeniører

        Ressourcer

      • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
      • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
      • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
      • Hvad er de største udfordringer for CTO'er og CIO'er?
      • Codest
      • Codest
      • Codest
      • Privacy policy
      • Vilkår for brug af hjemmesiden

      Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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