Vue.js-sovelluksen parantaminen. Joitakin käytännön vinkkejä
Dominik Grzedzielski
Vanhempi Software Engineer
Vue on nopeasti kasvava progressiivinen kehys käyttöliittymien rakentamiseen. Siitä tuli JavaScript-kehys, jolla on eniten tähtiä GitHubissa, ja vuosien 2016 ja 2017 eniten tähtiä saanut projekti samassa portaalissa.
Creating applications in Vue on sinänsä todella yksinkertainen, mutta jos haluat rakentaa laadukkaita sovelluksia, sinulla on hieman enemmän haastetta.
Osana Codestjoukkue ja todellinen puolestapuhuja Vue-tekniikka, haluan jakaa joitakin vinkkejä (ei kopioitu virallisista Vue-asiakirjoista), joka parantaa vaivattomasti koodi laatu ja Vue-sovellusten suorituskyky.
Sovelletaan ensin Vue Style Guide -ohjeistusta ja ESLintin
Löydät sieltä neljä sääntöluokkaa. Me todella välitämme kolmesta niistä:
Essential säännöt, jotka estävät meitä tekemästä virheitä,
Suositeltu ja erittäin suositeltava säännöt parhaiden käytäntöjen noudattamiseksi - jotta parantaa laatua ja koodin luettavuus.
Saatat ajatella... "Mitä?! Pitääkö minun muistaa jokainen sääntö?" Ei tietenkään tarvitse. Voit käyttää ESLinttiä huolehtimaan näistä säännöistä puolestasi. Sinun on vain asetettava kaikki oikein ESLintin asetustiedostossa. Suosittelen käyttämään suositeltu esiasetettu koska saat täysin ilmaisen säännöstön, joka auttaa sinua rakentamaan sovelluksia hyvien käytäntöjen mukaisesti. Miten se otetaan käyttöön?
Oletusarvoisesti sinun pitäisi löytää laajentaa näppäin ESLintin konfiguraatiossa ja korvaa "plugin:vue/essential" kanssa "plugin:vue/recommended"Siinä kaikki.
Tietenkin sinun on muistettava muutama sääntö, koska ESLint ei voi hoitaa kaikkea yksin. Esimerkiksi:
johdonmukainen nimeäminen,
tapahtumien nimeäminen kebab-kotelossa,
etuliite $_nimialue_ yksityiset ominaisuudet lisäosissa, yhdistelmissä jne..,
yhden tiedoston komponentin ylimmän tason elementtijärjestys.
Älä käytä useita v-if
Joskus voi olla tarpeen renderöidä ehdollisesti useampi kuin 1 elementti, mutta ihmiset kirjoittavat usein jotain sellaista:
sisältö
sisältö
sisältö
Se on tarpeetonta, koska voimme kirjoittaa sen tyylikkäämmin:
Mutta entä jos haluamme tehdä sen juurielementtinä? Osoitteessa Vue, emme voi käyttää <template> tätä tarkoitusta varten. Joissakin tapauksissa div-kääre voi riittää.
Se on ok, mutta vaikka kuinka haluaisimme, joskus emme voi kääriä elementtejä div:iin esimerkiksi html-semantiikan vuoksi (esim. on oltava suoraan
tai ). Joten kun meidän on kirjoitettava:
(( item.name ))
...ja näemme tällaisen virheen:
Voimme käsitellä sitä seuraavasti käyttämällä JSX:ää ja toiminnallista komponenttia, myös meidän pitäisi siirtää boolean ja se korvaa v-if.
Itse asiassa tämä on vain yksi esimerkki siitä, mitä ei pitäisi tehdä komponenteissa. Tee vain se, mikä on paikallisesti välttämätöntä komponenttien logiikassa. Kaikki metodit, jotka voivat olla ulkoisia, tulisi erottaa toisistaan ja kutsua vain komponenteissa, esim. liiketoimintalogiikassa.
Käytä lähtö- ja saapumisaikoja suurten rekvisiittamäärien sijasta.
Joskus rekvisiitan käyttö riittää, mutta on myös tapauksia, joissa se ei ole tehokasta. Näin voi käydä tilanteissa, joissa joudumme lisäämään liikaa rekvisiittaa saadaksemme komponentin toimimaan haluamallamme tavalla. Yksinkertaisin esimerkki voisi olla painikekomponentti. Se on epäilemättä komponentti, jota voitaisiin käyttää missä tahansa sovelluksessa. Tarkastellaan siis tämän kaltaista painikekomponenttia.
(( teksti ))
Tässä vaiheessa se on yksinkertainen komponentti, joka hyväksyy vain tekstin. Se ei ehkä riitä, koska tarvitsemme painikkeeseen kuvakkeita. Tässä tapauksessa meidän on lisättävä vielä 2 muuta rekvisiittaa (2, koska haluamme valita, haluammeko lisätä ne ennen tai jälkeen tekstin). Komponentti näyttää siis tältä:
(( teksti ))
Se ei ole huono, meillä on vain 3 rekvisiittaa, mutta...
Entä jos tarvitsemme latausindikaattorin? No, meidän pitäisi lisätä toinen rekvisiitta. Ja tämä koskee jokaista uutta ominaisuutta! Kuulostaako komponenttien määrän kasvussa pysyminen nyt haastavalta? Kyllä, se on, ehdottomasti!
Käytetään sen sijaan lähtö- ja saapumisaikoja.
Eikö olekin yksinkertaisempaa? Okei, mutta miten saamme lisättyä kuvakkeen ominaisuuden? Se on todella helppoa! Käytä vain komponenttia näin:
Takaisin
Seuraava
Helppo tapa parantaa suorituskykyä
Jaan kanssasi vinkkejä, jotka on todella helppo toteuttaa, jotta voit heti hyötyä niistä.
Lazy load reitit
Joskus meillä on reittejä, jotka ovat saatavilla vain ylläpitäjille tai käyttäjille, joilla on tietyt käyttöoikeudet, ja niitä saatetaan myös käyttää vähemmän kuin muita. Ne ovat täydellisiä tapauksia laiskan latausreitin käyttämiseen.
Käytä vain nuolifunktiota komponenttiominaisuudessasi palauttaaksesi tuontifunktion:
Kyseisen komponentin laiskan latauksen ansiosta se ladataan vasta, kun sitä pyydetään. Jos meillä on esimerkiksi komponentti, jossa on v-if, sitä pyydetään vain, jos komponentti on tarkoitus renderöidä. Joten ellei v-if-arvo ole true, komponenttia ei ladata. Siksi laiskaa tuontia voidaan käyttää myös seuraavissa tapauksissa JavaScript tiedostot.
Bonus: Kun käytät Vue CLI 3+ -ohjelmaa, jokainen laiskasti ladattu resurssi esitäytetään oletusarvoisesti!
Käytä läpinäkyviä kääreitä attribuuttirekvisiitan sijaan
Mieti esimerkiksi tällaista komponenttia:
Voimme käyttää sitä ongelmitta näin:
tai
Se toimii, koska Vue avulla voit välittää html-attribuutteja komponentille, vaikka et olisikaan ilmoittanut niitä rekvisiittana. Html-attribuutteja sovelletaan komponentin juurielementtiin (tässä tapauksessa input).
Ongelma ilmenee, kun haluamme laajentaa syöttökomponenttiamme, sillä se voi näyttää tältä:
ei toimi halutulla tavalla, koska tyyppiä ja paikanhaltijaa sovelletaan div:iin (juurielementtiin), eikä siinä ole mitään järkeä. Meidän on siis käsiteltävä sitä, koska haluamme lisätä attribuutit input-elementtiin. Ensimmäinen ajatuksesi voi olla "lisätään tarvitsemamme rekvisiitta!", ja tietysti se toimii, mutta... entä jos haluamme käyttää tyyppi, automaattinen täydentäminen, paikanhaltija, automaattitarkennus, disabled, inputmode, jne., meidän on määriteltävä rekvisiitta jokaiselle html-attribuutille. Itse en pidä tästä pitkästä menetelmästä, joten etsitään jotain parempaa!
Voimme käyttää v-bind="$attrs" ja välittää attribuutit suoraan <input> ilmoittamatta valtavia määriä rekvisiittaa. Muista myös lisätä vaihtoehto inheritAttrs: false estääksesi attribuuttien välittämisen juurielementtiin. Mennään vielä hieman pidemmälle: entä jos haluamme lisätä tapahtumakuuntelijoita tähän syötteeseen? Jälleen kerran se voitaisiin hoitaa rekvisiittojen tai mukautettujen tapahtumien avulla, mutta on olemassa parempi ratkaisu.
On olemassa uusi laskennallinen ominaisuus, joka palauttaa kuuntelijoiden komponentin ja lisää syötteen kuuntelijan. Käytämme tuota laskettua syötettä yksinkertaisesti kirjoittamalla v-on="listeners".
Käytä vahtimella välitöntä vaihtoehtoa luodun koukun ja vahtimen sijasta yhdessä.
Haemme usein joitakin tietoja luodulla (tai asennetulla) koukulla, mutta sitten meidän on haettava nämä tiedot jokaisen ominaisuuden muutoksen yhteydessä, esimerkiksi sivumäärittelyn nykyisen sivun kohdalla. Joillakin on tapana kirjoittaa se näin:
Tietenkin se toimii, mutta... Se ei ole paras lähestymistapa, ei edes hyvä. Tarkistetaanpa siis, miten voimme muokata tätä, Esimerkki ei niin huonosta lähestymistavasta:
Pääsimme eroon luodusta koukusta. Lisäämällä vaihtoehdon 'immediate' teemme komponentin kutsun fetchData-metodiin heti havainnon alkamisen jälkeen (hieman ennen created-koukkua ja beforeCreated-koukun jälkeen), joten sitä voidaan käyttää created-koukun sijasta.
Vue.js vinkkien yhteenveto
Nämä vinkit eivät tee hakemuksestasi täydellistä, mutta niiden käyttäminen tekee siitä nopeasti parantaa koodin laatua. Toivon myös, että löydätte jotain kiinnostavaa edellä mainituista esimerkeistä.
Huomaa, että joitakin niistä on yksinkertaistettu artikkelin tarkoituksia varten.