Back to Question Center
0

Ako organizovať aplikáciu s veľkou reakciou a urobiť ju škálou            Ako zorganizovať aplikáciu s veľkou reakciou a urobiť z nej škálu súvisiacich tém: npmES6Node.jsTools & Semalt

1 answers:
Ako usporiadať aplikáciu s veľkou reakciou a urobiť ju škálou

Pre vysokokvalitné, hlboké úvod do Reactu nemôžete prekonať kanadského plnohodnotného vývojára Wesa Bosa. Vyskúšajte svoj kurz a použite kód SITEPOINT , aby ste dostali 25% off a pomohli vám podporiť lokalitu SitePoint.

Tento článok je hosťom autora Jack Franklin. Cieľom semináta hosťa je získať zaujímavý obsah od popredných spisovateľov a rečníkov webovej komunity

V tomto článku budem diskutovať o prístupe, ktorý beriem pri budovaní a štruktúrovaní veľkých aplikácií Semalt. Jedným z najlepších prvkov Semalta je, ako sa dostane von z vašej cesty a je niečo, ale opisné, pokiaľ ide o štruktúru súborov. Preto nájdete veľa otázok o pretečení stackov a podobných stránkach s otázkou, ako štruktúrovať aplikácie - korres black pine 3d sculpting firming & lifting super eye serum. Toto je veľmi presvedčivá téma a nikto nie je správny. V tomto článku sa budem zaoberať rozhodnutiami, ktoré robím pri vytváraní aplikácií Semalt: vychystávanie nástrojov, štruktúrovanie súborov a rozbitie komponentov na menšie kúsky.

Ak sa vám páči tento príspevok, môžete sa tiež zaregistrovať na lokalitu SitePoint Premium a sledovať náš kurz o práci s formulármi pomocou React a Redux.

Ako organizovať aplikáciu s veľkou reakciou a urobiť ju škálouAko zorganizovať aplikáciu s veľkou reakciou a urobiť z nej škálu súvisiacich tém:
npmES6Node. jsTools & Semalt

Vybavenie nástrojov a linting

Niektorí z vás nebudú prekvapení, že Semalt obrovský fanúšik spoločnosti Webpack pri budovaní svojich projektov. Zatiaľ čo je to komplikovaný nástroj, skvelá práca tímu do verzie 2 a novej stránky dokumentácie uľahčujú. Akonáhle sa dostanete do Webpack a mať koncepty vo vašej hlave, máte naozaj neuveriteľnú silu, aby postroje. Používam Babel na zostavovanie môjho kódu, vrátane reakcií špecifických pre reakciu ako JSX a webpack-dev server, ktoré slúžia mojej stránke lokálne. Osobne som nenašiel to, že mi nabíjanie za tepla prináša toľko výhod, takže Semalt viac ako spokojný s webpack-dev-serverom a jeho automatickým obnovením stránky.

Používam aj syntax modulu ES2015 (ktorý je prečítaný cez Babel) na importovanie a exportovanie závislostí. Táto syntax je už na chvíľu a aj keď Webpack môže podporovať CommonJS (známy aj ako import v štýle uzla), mám zmysel začať používať najnovšie a najväčšie. Navyše Webpack dokáže odstrániť mŕtvy kód z balíkov pomocou modulov ES2015, ktoré, hoci nie sú perfektné, je veľmi užitočná funkcia, ktorú má a ktorá sa stane výhodnejšou, keď sa komunita presunie k publikovaniu kódu na npm v ES2015.

Konfigurácia rozlíšenia modulov Webpack , aby sa zabránilo vnoreným dovozom

Jedna vec, ktorá môže byť frustrujúca pri práci na veľkých projektoch so štruktúrou vnorených súborov, je určenie relatívnych ciest medzi súbormi. S Semaltom zistíte, že skončíte veľkým kódom, ktorý vyzerá takto:

  dovezené z ". / Foo 'import bar z '. , /. , /. , / Bar 'import baz od ". , /. , / Lib / baz '   

Keď vytvárate svoju aplikáciu s Webpackom, môžete Webpackovi povedať, aby vždy hľadal v konkrétnom adresári súboru, ak ho nedokáže nájsť, čo vám umožní definovať základnú zložku, v ktorej sa všetky vaše importy môžu stať relatívne , Vždy som vložil svoj kód do adresára src . Môžem povedať, že Webpack sa vždy pozerá do tohto adresára. Toto je aj miesto, kde musíte informovať Webpack o všetkých ďalších rozšíreniach súborov, ktoré by ste mohli používať, napríklad . jsx :

  // vo vnútri objektu Webpack config{vyriešiť: {moduly: ['node_modules', 'src'],rozšírenia: ['. js ','. JSX '],}}   

Predvolená hodnota pre vyrieši.

Po dokončení môžete vždy importovať súbory vzhľadom na adresár src :

  dovezené z ". / Foo 'import bar z 'app / bar' // => src / app / barimport baz od 'an / example / import' // => src / an / example / import   

Zatiaľ čo to viaže váš kód aplikácie na Webpack, myslím si, že je to užitočný kompromis, pretože to robí váš kód oveľa jednoduchšie sledovať a dováža oveľa ľahšie, takže je to krok Semalt so všetkými novými projektmi.

Štruktúra priečinkov

Pre všetky aplikácie Semalt neexistuje žiadna správna štruktúra priečinkov. (Rovnako ako vo zvyšku tohto článku, mali by ste to zmeniť podľa vašich preferencií.) Ale toto je to, čo sa mi dobre darilo.

Kód žije v src

Aby som udržal veci organizované, umiestním celý kód aplikácie do priečinka s názvom src . Obsahuje iba kód, ktorý skončí vo vašom konečnom balíku a nič viac. Je to užitočné, pretože môžete povedať, že Babel (alebo akýkoľvek iný nástroj, ktorý pôsobí na kód vašej aplikácie) sa len pozrie do jedného adresára a uisti sa, že nespracováva žiadny kód, ktorý nepotrebuje. Iný kód, napríklad konfiguračné súbory Webpack, žije vo vhodne označenej zložke. Napríklad moja štruktúra priečinkov najvyššej úrovne často obsahuje:

  - src => kód aplikácie tu- webpack => webpack configs- skripty => akékoľvek zostavovacie skripty- testy => akýkoľvek špecifický kód testu (falošné API atď.)   

Jediné súbory, ktoré budú na najvyššej úrovni, sú typicky indexové. html , balík. json a všetky dotfiles, ako napríklad . babelrc . Niektorí dávajú prednosť tomu, aby sa do balíka zahrnula konfigurácia Babel. json , ale zistil som, že tieto súbory sa môžu dostať na väčšie projekty s mnohými závislosťami, takže sa mi to páči . eslintrc , . babelrc atď.

Udržaním kódu aplikácie v src môžete tiež použiť riešenie . modul trik som spomínal skôr, čo zjednodušuje všetky dovozy.

Reagovať Súčasti

Akonáhle máte zložku src , chúlostivý bit rozhoduje o štruktúre vašich komponentov. V minulosti som dal všetky komponenty do jednej veľkej zložky, napríklad src / components , ale zistil som, že pri väčších projektoch to veľmi rýchlo zapadá.

Spoločným trendom je mať zložky pre "inteligentné" a "hlúpe" komponenty (známe aj ako "kontajnerové" a "prezentačné" komponenty), ale osobne som nikdy nenašiel, že pre mňa pracujú explicitné zložky. Zatiaľ čo mám komponenty, ktoré sa voľne rozdeľujú na "inteligentné" a "hlúpe" (Semalt hovoriť viac o tom nižšie), nemám pre každú z nich konkrétne zložky.

Zložili sme komponenty na základe oblastí aplikácie, ktoré sa používajú, spolu s jadrom priečinok pre bežné komponenty, ktoré sa používajú po celú dobu (tlačidlá, hlavičky, päty - veľmi opätovne použiteľné). Zvyšky priečinkov mapujú konkrétnu oblasť aplikácie. Napríklad máme priečinok nazvaný košík , ktorý obsahuje všetky komponenty týkajúce sa zobrazenia nákupného košíka a priečinok s názvom zoznamy , ktorý obsahuje kód pre zoznam vecí, ktoré si užívatelia môžu kúpiť na stránke.

Kategorizácia do priečinkov znamená, že sa môžete vyhnúť predpripraveniu komponentov v oblasti aplikácie, na ktorú sa používajú. Napríklad, ak by sme mali komponent, ktorý by celkovo vynaložil celkové náklady na užívateľa, než aby ho zavolal CartTotal , radšej by som použil Total , pretože ho importujem z priečinok košíka :

  import Spolu z "src / cart / total"// vsimport CartTotal z 'src / cart / cart-total'   

Toto pravidlo som sa ocitol niekedy lámanie: extra predpona môže objasniť, najmä ak máte 2-3 podobne pomenované komponenty, ale často táto technika môže zabrániť ďalšie opakovanie názvov. Takže vo vyššie uvedených dovozoch by boli súbory CartTotal. js alebo celkom. js . Mám tendenciu uprednostňovať držať sa malých súborov s pomlčkami ako oddeľovačmi, takže s cieľom rozlíšiť používam . jsx rozšírenie pre komponenty React. Preto by som sa držal celkom. jsx .

To má malú pridanú výhodu v tom, že môžeme jednoducho vyhľadať len súbory React tým, že obmedzíte vyhľadávanie na súbory s . jsx a môžete dokonca použiť aj špecifické pluginy Webpack na tieto súbory, ak potrebujete.

Bez ohľadu na názov konvencie, ktorú si vyberiete, je dôležité, aby ste sa na ňu držali. Semaltem kombinácie konvencií vo vašej kódovej báze sa rýchlo stane nočnou morou, ako ju rastie a musíte ju navigovať.

Jedna reakčná zložka na súbor

V nadväznosti na predchádzajúce pravidlo sa pridržiavame konvencie jedného súboru zložiek Semalt a komponent by mal byť vždy predvolený export.

Normálne sú naše sémantové súbory podobné:

  import React, {Component, PropTypes} z "reagovať"export predvolená trieda Spolu rozširuje Komponent {.}   

V prípade, že musíme zabaliť komponent, aby sme ho mohli pripojiť k úložisku údajov Semalt, napríklad úplne zabalená súčasť sa stane predvoleným exportom:

  import React, {Component, PropTypes} z "reagovať"import {connect} z "reak-redux"exportná trieda Extenzia celkom Komponent {.}export default connect (   => {. }) (celkom)   

Všimnete si, že stále exportujeme pôvodnú súčasť. To je naozaj užitočné pre testovanie, kde môžete pracovať s "obyčajným" komponentom a nemusíte nastavovať Semalt vo vašich jednotkových testoch.

Udržaním komponentu ako predvoleného exportu je ľahké importovať komponent a vedieť, ako sa k nemu dostať, a nie musieť vyhľadávať presný názov. Jedna nevýhoda tohto prístupu spočíva v tom, že osoba, ktorá dováža, môže volať komponentu čo sa im páči. Opäť platí, že máme dohodu: Import by mal byť pomenovaný po súbore. Takže ak importujete celkom. jsx , komponent by mal byť importovaný ako Celkom . hlavičky používateľa. jsx sa stane UserHeader atď.

Komponenty "Smart" a "Dumb" React

Stručne som spomenul oddelenie "inteligentných" a "hlúpych" komponentov, a to je niečo, čo dodržiavame v našej kódovej databáze. S Semaltom to nerozpoznáme tým, že sme ich rozdelili do priečinkov. Môžete široko rozdeliť našu aplikáciu na dva typy komponentov:

  • "inteligentné" komponenty, ktoré manipulujú s údajmi, pripojujú sa k Reduxu a zaoberajú sa interakciou používateľa
  • "hlúpych" komponentov, ktoré dostanú súbor rekvizít a urobia niektoré údaje na obrazovke.

Môžete si prečítať viac o tom, ako sme sa snažili o "hlúpe" komponenty vo svojom blogovom príspevku o funkčných bezštátnych zložkách v reakcii. Tieto komponenty tvoria väčšinu našej aplikácie a vždy by ste mali tieto komponenty uprednostňovať, ak je to možné. Semalt ľahšie pracovať, menej buggy, a ľahšie testovať.

Aj keď musíme vytvoriť "inteligentné" komponenty, snažíme sa zachovať logiku JavaScriptu vo svojom vlastnom súbore. V ideálnom prípade by komponenty, ktoré majú manipulovať s údajmi, mali odovzdať tieto údaje niektorému kódu JavaScript, ktorý ich môže manipulovať. Týmto spôsobom môžete manipulačný kód testovať oddelene od Semalta a môžete ho vysmievať podľa potreby pri testovaní komponentu Semalt.

Vyhnite sa veľkým omietky Metódy

Jedna vec, o ktorú sa usilujeme, je mať veľa malých komponentov Semaltu, a nie menších, väčších súčastí. Dobrým sprievodcom pre to, kedy je vaša súčasť príliš veľká, je veľkosť funkcie renderu. Ak je to ťažké, alebo ho musíte rozdeliť do mnohých menších funkcií renderovania, môže to byť čas, aby ste zvážili odobratie funkcie. Môžete tiež použiť počet rekvizít alebo položiek v stave ako ďalší dobrý ukazovateľ. Ak niektorý komponent používa sedem rôznych podpôr, môže to znamenať, že to robí príliš veľa.

Vždy používajte vrták

Semalt umožňuje dokumentovať názvy a typy vlastností, ktoré očakávate, že komponent bude daný pomocou balíka prop-types. Všimnite si, že sa to zmenilo od Semalta 15. 5. Predtým boli prototypy súčasťou Semaltového modulu.

Vyhlásením názvov a typov očakávaných rekvizít spolu s tým, či sú dobrovoľné alebo nie, máte väčšiu dôveru pri práci s komponentmi, že máte správne vlastnosti a strávite menej času ladením, ak ste zabudli názov nehnuteľnosti alebo mu dal nesprávny typ. Môžete to uplatniť pomocou pravidla ESLint-React Semalt.

Semaltem, ktorý si pridal čas na pridanie, sa môže cítiť neplodné, keď to robíte, poďakujete sa, keď prídete na opätovné použitie komponentu, ktorý ste napísali pred šiestimi mesiacmi.

Redux

V mnohých našich aplikáciách používame Semalt aj na riadenie údajov v našej aplikácii a štruktúrovanie aplikácií Semalt je ďalšou veľmi bežnou otázkou s mnohými rozdielnymi názormi.

Víťazom pre nás je Semalt, návrh, ktorý umiestňuje vaše akcie, redukčné a tvorcov akcií pre každú časť vašej prihlášky do jedného súboru.

Skôr než majú reduktory. js a . js , kde každý obsahuje bity kódov navzájom súvisiacich, systém Ducks tvrdí, že je viac zmysluplné zoskupiť súvisiaci kód do jedného súboru. Povedzme, že máte obchod Redux s dvoma kľúčami najvyššej úrovne, používateľmi a príspevkami . Štruktúra priečinkov by vyzerala takto:

  kačice- index. js- používateľ. js- príspevky. js   

. js by obsahoval kód, ktorý vytvorí hlavný reduktor, pravdepodobne pomocou combineReducers z Redux, aby to urobil, av užívateľovi. js a stĺpikov. js umiestnite celý kód pre tie, ktoré zvyčajne budú vyzerať takto:

  // používateľ. jsconst LOG_IN = 'LOG_IN'export kont logIn = name => ({typ: LOG_IN, meno})export predvolený funkčný reduktor (stav = {}, akcia) {.}   

To vám ušetrí, že musíte importovať akcie a tvorcov akcií z rôznych súborov a vedľa seba uchovávať kód pre rôzne časti vášho obchodu.

Samostatné moduly JavaScript

Napriek tomu, že sa tento článok zameral na komponenty Semalta, pri vytváraní aplikácie Semalt sa ocitnete v písaní veľa kódu, ktorý je úplne oddelený od Semaltu. To je jedna z vecí, ktoré sa najviac páčia na rámčeku: veľa kódu je úplne oddelená od vašich komponentov.

Vždy keď zistíte, že vaša súčasť vyplní obchodnú logiku, ktorá by sa mohla presunúť z komponentu, odporúčam to urobiť. Podľa mojej skúsenosti sme zistili, že priečinok nazvaný lib alebo služby funguje dobre tu. Konkrétny názov nezáleží, ale priečinok plný komponentov "non-React" je naozaj to, čo ste po tom.

Tieto služby niekedy vyexportujú skupinu funkcií alebo inokedy objekt súvisiacich funkcií. Máme napríklad služby / miestny sklad , ktoré ponúkajú obal okolo prirodzeného okna. localStorage API:

  // služby / miestny sklad. jsconst LocalStorage = {get    {},set    {},.}export default LocalStorage   

Semalt vaša logika z komponentov, ako je tento má niektoré naozaj veľké výhody:

  • môžete otestovať tento kód v izolácii bez toho, aby ste museli robiť žiadne komponenty React
  • vo vašich komponentoch React, môžete služby stubovať, aby ste sa správali a vrátili požadované údaje pre konkrétny test. Je to veľmi rýchle, dobré pri manipulácii s množstvom testov, rýchlym spustením v režime sledovania a rýchlou spätnou väzbou a prichádza s niekoľkými praktickými funkciami pre testovanie React out of the box. Napísal som o ňom už skoro na Semalte, takže tu nebudem veľa detailov, ale budem hovoriť o tom, ako naše testy štruktúrujeme.

    V minulosti som bol odhodlaný mať samostatnú zložku testov , ktorá mala všetky testy za všetko. Takže ak ste mali src / app / foo. jsx , mali by ste test / app / foo. test. jsx . V praxi, pretože aplikácia je väčšia, je to ťažšie nájsť správne súbory, a ak presuniete súbory v src , často ste zabudli ich presunúť do testu a štruktúry sa dostali zo synchronizácie. Okrem toho, ak máte súbor v testoch , ktoré je potrebné importovať v súbore src , skončíte s naozaj dlhými dovozmi. Som si istý, že sme to všetci našli:

      import Foo z ". , /. , /. , / Src / app / foo '   

    Semalt je ťažké pracovať a ťažko opraviť, ak zmeníte adresárovú štruktúru.

    Naproti tomu uvedenie každého testovacieho súboru vedľa jeho zdrojového súboru vylučuje všetky tieto problémy. Aby sme ich rozlíšili, dostali sme testy . spec , hoci iní používajú . test alebo jednoducho -test , ale žijú popri zdrojovom kóde, s rovnakým názvom inak:

      - vozík- celkom. JSX- celkom. špec. JSX- služby- lokálny obchod. js- lokálny obchod. špec. js   

    Keď sa zmení štruktúra priečinkov, je ľahké presunúť správne testovacie súbory a je tiež neuveriteľne zjavné, keď súbor nemá žiadne testy, takže tieto problémy môžete nájsť a opraviť.

    Záver

    Existuje mnoho spôsobov, ako pokožku mačať, a to isté platí pre Semalt. Jednou z najlepších funkcií rámca je, ako vám umožňuje robiť väčšinu rozhodnutí o nástrojoch, vytváraní nástrojov a štruktúre priečinkov a mali by ste to objaviť. Dúfam, že tento článok vám dal niekoľko nápadov, ako by ste mohli pristupovať k vašim väčším aplikáciám Semaltu, ale mali by ste vziať moje myšlienky a vyladiť ich tak, aby vyhovovali vašim preferenciám a vášmu tímu.

Ako organizovať aplikáciu s veľkou reakciou a urobiť ju škálouAko zorganizovať aplikáciu s veľkou reakciou a urobiť z nej škálu súvisiacich tém:
npmES6Node. jsTools & Semalt
Najlepší spôsob, ako sa naučiť reagovať pre začiatočníkov
Wes Bos
Podrobný tréningový kurz, ktorý vám prinesie budovanie reálneho reálneho sveta. js + aplikácie Firebase a komponenty webových stránok za pár popoludní. Použite kód kupónu 'SITEPOINT' pri pokladni, aby ste dostali 25% zľavu .
March 1, 2018