Vue.js programos tobulinimas. Keletas praktinių patarimų
Dominik Grzedzielski
Vyresnysis Software Engineer
Vue yra sparčiai populiarėjanti progresyvi vartotojo sąsajų kūrimo sistema. Ji tapo daugiausiai žvaigždučių "GitHub" portale turinčia JavaScript sąranka ir daugiausiai žvaigždučių turinčiu 2016 ir 2017 m. projektu tame pačiame portale.
Programų kūrimas Vue yra labai paprasta, tačiau jei norite kurti geros kokybės programas, teks įveikti šiek tiek daugiau iššūkių.
Dalyvavimas The Codestkomanda ir tikras advokatas Vue technologija, noriu pasidalyti kai kuriais patarimai (nekopijuota iš oficialių Vue dokumentų), kuri be vargo pagerins kodas kokybę ir Vue programų našumas.
Pirmiausia taikykite Vue stiliaus vadovą ir ESLint
Rekomenduojama ir primygtinai rekomenduojama geriausios praktikos laikymosi taisyklės - į gerinti kokybę. ir kodo skaitomumą.
Galite pagalvoti... "Ką?! Ar aš turiu prisiminti kiekvieną taisyklę?" Žinoma, nereikia. Galite naudoti "ESLint", kad šiomis taisyklėmis pasirūpintų už jus. Jums tereikia viską tinkamai nustatyti "ESLint" konfigūracijos faile. Siūlau naudoti rekomenduojama iš anksto nustatytas nes gausite visiškai nemokamą taisyklių rinkinį, kuris padės jums kurti programėles pagal gerąją praktiką. Kaip ją nustatyti?
Pagal numatytuosius nustatymus turėtumėte rasti išplečia ESLint konfigūracijos raktą ir pakeiskite "plugin:vue/essential" su "plugin:vue/recommended"ir viskas.
Žinoma, reikia prisiminti keletą taisyklių, nes "ESLint" negali visko atlikti pati. Pavyzdžiui:
nuoseklus pavadinimų suteikimas,
įvykių pavadinimai kebab-case,
priešdėlio $_namespace_ privačios įskiepių, mišinių ir kt. savybės,
vieno failo komponento aukščiausio lygio elementų tvarka.
Nenaudokite kelių v-if
Kartais gali prireikti sąlygiškai atvaizduoti daugiau nei 1 elementą, tačiau žmonės dažnai rašo kažką panašaus:
turinys
turinys
turinys
Jis nereikalingas, nes galime jį parašyti elegantiškiau:
Tačiau ką daryti, jei norime tai padaryti kaip šakninį elementą? Svetainėje Vue, negalime naudoti šiam tikslui. Kai kuriais atvejais gali pakakti suvynioti į divą.
Tai gerai, tačiau, kad ir kaip norėtume, kartais negalime apvynioti elementų į div, pavyzdžiui, dėl html semantikos (pvz. turi būti tiesioginis
arba ). Taigi, kai turime rašyti:
((( item.name ))
...ir pamatysime tokią klaidą:
Galime spręsti šią problemą naudojant JSX ir funkcinį komponentą, taip pat turėtume perduoti loginį simbolį ir jis pakeis v-if.
Nerašykite api skambučių tvarkyklių komponentuose
Tiesą sakant, tai tik vienas iš pavyzdžių, ko nereikėtų daryti komponentuose. Komponentų logikoje tiesiog darykite tai, kas būtina vietoje. Kiekvienas metodas, kuris galėtų būti išorinis, turėtų būti atskirtas ir kviečiamas tik komponentuose, pvz., verslo logikoje.
Naudokite laiko tarpsnius, o ne didelį kiekį rekvizitų
Kartais užtenka naudoti atramas, tačiau pasitaiko atvejų, kai jos nėra veiksmingos. Taip gali nutikti, kai norint, kad komponentas veiktų taip, kaip norime, reikėtų pridėti per daug rekvizitų. Paprasčiausias pavyzdys galėtų būti mygtuko komponentas. Be jokios abejonės, tai komponentas, kurį galima naudoti bet kurioje programos vietoje. Taigi apsvarstykime tokį mygtuko komponentą kaip šis.
(( tekstas ))
Šiame etape tai paprastas komponentas, kuris priima tik teksto rekvizitą. Gerai, bet to gali nepakakti, nes mums reikės piktogramų mygtuke. Tokiu atveju turime pridėti dar 2 rekvizitus (2, nes norime turėti galimybę pridėti prieš arba po teksto). Taigi komponentas atrodys taip:
(( tekstas ))
Nėra blogai, turime tik 3 atramas, bet...
Ką daryti, jei reikia krovimo indikatoriaus? Tuomet tektų pridėti dar vieną atramą. Ir taip yra su kiekviena nauja funkcija! Ar dabar neatsilikti nuo komponentų skaičiaus augimo skamba kaip iššūkis? Taip, tikrai taip!
Vietoj to naudokime laiko tarpsnius.
Paprasčiau, tiesa? Gerai, bet kaip galime gauti piktogramos pridėjimo funkciją? Tai labai paprasta! Tiesiog naudokite komponentą taip:
Atgal
Kitas
Lengvas būdas pagerinti našumą
Pasidalysiu keliais patarimais, kuriuos tikrai lengva įgyvendinti, kad iš karto gautumėte naudos.
Lėtosios apkrovos maršrutai
Kartais turime maršrutų, kurie prieinami tik administratoriams arba naudotojams, turintiems tam tikrą prieigą, jie taip pat gali būti lankomi rečiau nei kiti. Tai puikūs atvejai naudoti tingaus įkėlimo maršrutą.
Tiesiog naudokite rodyklės funkciją savo komponento savybėje, kad grąžintumėte importo funkciją:
Dėl šio komponento tingaus įkėlimo jis bus atsisiunčiamas tik tada, kai bus paprašytas. Pavyzdžiui, jei turime komponentą su v-if, jo bus prašoma tik tada, kai komponentas bus atvaizduojamas. Taigi, jei v-if reikšmė nėra true, komponentas nebus įkeltas. Štai kodėl tingus importavimas gali būti naudojamas ir JavaScript failai.
Premija: Naudojant "Vue CLI 3+", kiekvienas tingiai įkeltas išteklius pagal nutylėjimą yra iš anksto parenkamas!
Vietoj atributų rekvizitų naudokite skaidrius apvalkalus
Panagrinėkite tokį komponentą kaip šis:
Be jokių problemų galime jį naudoti taip:
arba
Tai veikia, nes Vue leidžia komponentui perduoti html atributus, net jei jų nedeklaravote kaip rekvizitų. HTML atributai taikomi komponento šakniniam elementui (šiuo atveju įvesties elementui).
Problema iškyla, kai norime išplėsti įvesties komponentą, nes jis gali atrodyti taip:
neveiks taip, kaip mes norime, nes tipas ir žymeklis bus taikomi div (šakniniam elementui), o tai neturi jokios prasmės. Taigi, turime su tuo susidoroti, nes norime pridėti savo atributus prie įvesties elemento. Pirmoji jūsų mintis gali būti "pridėkime reikiamus rekvizitus!" ir, žinoma, tai suveiks, bet... ką daryti, jei norime naudoti tipas, automatinio užbaigimo funkcija, Vietoj, automatinis fokusavimas, neįgalieji, įvesties režimas, ir t. t., tada turime apibrėžti kiekvieno html atributo rekvizitus. Man asmeniškai šis ilgas metodas nepatinka, todėl ieškokime ko nors geresnio!
Galime naudoti v-bind="$attrs" ir perduoti atributus tiesiogiai į nedeklaruojant didžiulių rekvizitų kiekių. Taip pat nepamirškite pridėti parinktį inheritAttrs: false išjungti atributų perdavimą šakniniam elementui. Eikime šiek tiek toliau: ką daryti, jei prie šios įvesties reikia pridėti įvykių klausytojų? Vėlgi, tai būtų galima tvarkyti rekvizitais arba pasirinktiniais įvykiais, tačiau yra geresnis sprendimas.
Yra nauja apskaičiuota savybė, kuri grąžina klausytojų komponentą ir prideda įvesties klausytoją. Mes naudojame tą apskaičiuotą įvestį tiesiog rašydami v-on="klausytojai".
Naudokite stebėtoją su parinktimi nedelsiant, o ne sukurtą kabliuką ir stebėtoją kartu
Dažnai tam tikrus duomenis gauname iš sukurto (arba sumontuoto) kabliuko, tačiau vėliau tuos duomenis reikia gauti kiekvieną kartą keičiant savybę, pvz., dabartinį puslapio puslapį. Kai kurie linkę tai užrašyti taip:
Žinoma, tai veikia, bet... Tai nėra pats geriausias būdas, net ne pats geriausias. Taigi, patikrinkime, kaip mes galime tai refaktorizuoti, Ne tokio blogo požiūrio pavyzdys:
Aukščiau pateiktas variantas yra geresnis, nes kito metodo nereikia, mes tik įvardijome metodą, kuris turėtų būti iškviestas norint pakeisti watchedProperty.
Dar geresnis būdas:
Atsikratėme sukurto kabliuko. Pridėję parinktį "immediate", šį komponento fetchData metodą iškviečiame iš karto po stebėjimo pradžios (tai šiek tiek anksčiau už sukurtąjį kabliuką ir po beforeCreated), todėl jį galima naudoti vietoj sukurtojo kabliuko.
Vue.js patarimų santrauka
Šie patarimai nepadarys jūsų paraiškos tobulos, tačiau jų naudojimas padės greitai pagerinti kodo kokybę.. Taip pat tikiuosi, kad pirmiau pateiktuose pavyzdžiuose rasite ką nors įdomaus.
Atkreipkite dėmesį, kad kai kurie iš jų buvo supaprastinti straipsnio tikslais.