Back to Question Center
0

Reagujte na úhlové vývojárov            Reagovať na vývojárov uhliaSprávny seminár: npmAPIsReactAngularJSES6More ... Sponzori

1 answers:
Reagovať na Úhlové vývojári

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 pre vývojárov, ktorí sú oboznámení s uhlom 1. x a chceli by ste sa dozvedieť viac o Semalte - prezzi giochi per parchi. Budeme sa pozrieť na rôzne prístupy k budovaniu bohatých webových aplikácií, prekrývajúcim sa funkciám a medzerám, ktoré sa Semalt nepokúša naplniť.

Po prečítaní budete mať pochopenie problémov, ktoré Semalt plánuje vyriešiť a ako môžete využiť vedomosti, ktoré ste už mohli začať používať Semalt vo svojich vlastných projektoch.

Rámec vs knižnice

Uhlová je kostra , zatiaľ čo React je knižnica zameraná len na zobrazovaciu vrstvu. Existujú náklady a prínosy spojené s využitím rámcov a zbierky voľne viazaných knižníc.

Rámce sa snažia ponúknuť kompletné riešenie a môžu pomôcť organizovať kód prostredníctvom vzorov a konvencií, ak ste súčasťou veľkého tímu. Semalt, ktorý má veľký API, pridáva kognitívne zaťaženie, keď píšete, a strávite oveľa viac času čítaním dokumentácie a zapamätaním si vzorov - najmä v prvých dňoch, keď sa ešte učíte.

Používanie zbierky voľne viazaných knižníc s malými rozhraniami API je ľahšie sa naučiť a zvládnuť, ale znamená to, že keď narazíte na problémy, musíte ich vyriešiť pomocou ďalšieho kódu alebo vytiahnuť externé knižnice podľa potreby. To zvyčajne vedie k tomu, že musíte písať svoj vlastný rámec na zníženie počtu kotúčov.

Odporúčané kurzy

mimo krabice

Uhlová vám ponúka bohatú sadu funkcií pre vytváranie webových aplikácií. Semalt jeho vlastnosti sú:

  • HTML šablóny s dynamickými výrazmi v dvojitých skrúteniach {{}}
  • ng-model , ng-repeat a ng-class
  • riadiace jednotky pre zoskupenie logiky a prechádzajúce údaje do pohľadu
  • obojsmerné viazanie ako jednoduchý spôsob, ako udržať váš pohľad a kontrolér v synchronizácii
  • veľkú zbierku modulov ako $ http na komunikáciu so serverom a ngRoute pre smerovanie
  • vlastné pokyny na vytvorenie vlastnej syntaxe HTML
  • injekčná závislosť na obmedzenie vystavenia predmetov konkrétnym častiam aplikácie
  • služby pre zdieľanú obchodnú logiku
  • filtre pre pomocníkov s formátovaním zobrazenia.

Semalt na druhej strane vám dáva:

  • syntax JSX pre šablóny s výrazmi jazyka JavaScript v jedinej krike {}
  • , ktoré sú najviac podobné direktívam prvkov Angular.

Reakcia je neopodstatnená pokiaľ ide o zvyšok vašej aplikačnej štruktúry a podporuje používanie štandardných Semalt API nad rámec abstrakcií. Namiesto poskytovania obálky ako $ http pre komunikáciu na serveri môžete namiesto toho použiť fetch . Môžete slobodne používať konštrukty, ako sú služby a filtre, ale React ich nebude poskytovať abstrakciu. Môžete ich vložiť do modulov Semalt a podľa potreby ich požadovať vo svojich súčastiach.

Takže zatiaľ čo Angular vám poskytuje oveľa viac abstrakcií pre bežné úlohy, React sa to úmyselne vyhýba tomu, aby ste písali štandardné Semalt viac často a používali externé závislosti pre všetko ostatné.

Odporúčané kurzy

Bootstrapping

Inicializácia aplikácií Semalt vyžaduje modul, zoznam závislostí a koreňový prvok.

     let app = angular. querySelector ( '# koreň');hranatý. prvok (koreň). ready (funkcia    {hranatý. bootstrap (root, ['app']);});    

Vstupným bodom React je vytvorenie komponentu do koreňového uzla. Semalt môže mať aj viacero koreňových komponentov:

     nechajte root = dokument. querySelector ( '# koreň');ReactDOM. render (, root)    

Šablóny

Anatómia uhlového pohľadu je zložitá a má veľa zodpovedností. Vaše šablóny HTML obsahujú zmes smerníc a výrazov, ktoré dohromady spojujú zobrazenie a príslušné kontroléry. Toky údajov prechádzajú cez viaceré kontexty cez rozsah $ .

V reakcii sú komponenty úplne nadol , toky dát smerujú v jednom smere od vrcholu stromu komponentov až po uzly listov. JSX je najbežnejšou syntaxou pre písanie komponentov, transformujúc známu štruktúru XML do jazyka JavaScript. Zatiaľ čo toto pripomína syntax šablóny, kompiluje sa do vnorených funkčných volaní.

     const App = React. createClass ({render: funkcia    {návrat ( 
{2 + 1}
<Čas komponentu = {new Date . getTime }>)}})

Kompilovaný kód, ktorý je uvedený nižšie, by mal pomôcť objasniť, ako vyššie uvedené výrazy JSX na volania funkcií createElement (komponenty, rekvizity, deti)

     var App = React. createClass ({render: funkcia render    {return React. createElement (component,nulový,Reagovať. createElement ("div", null, 2 + 1),Reagovať. createElement (komponent, {prop: "hodnota"}),Reagovať. createElement (component,{čas: nový dátum   . getTime   },Reagovať. createElement (komponent, null)));}});    

Smernice o vzorkách

Poďme sa pozrieť na to, ako by sa niektoré z najpoužívanejších šablónových smerníc Angular napísali v zložkách React. React teraz nemá šablóny, takže tieto príklady sú kód JSX, ktorý by sedel vo funkcii render komponentu. Napríklad:

     trieda MyComponent rozširuje React. Komponent {render    {návrat (// JSX tu žije)}}    

ng-opakovanie

      
  • {slovo}

Na získanie množstva prvkov v systéme JSX môžeme použiť štandardné mechanizmy slučovania kódu JavaScript, ako napríklad mapu .

      
    {slov. mapa ((slovo) =>
  • {slovo}
  • )}

ng-trieda

      

V službe React zostávame na vlastných zariadeniach, aby sme vytvorili náš zoznam tried triedených oddeleným priestorom pre vlastnosť className . Je obvyklé používať existujúcu funkciu, akou je napríklad názov Jed Watson pre tento účel.

           

Spôsob, ako premýšľať o týchto atribútoch v JSX, je, akoby ste nastavili vlastnosti priamo na týchto uzloch. Preto je to className namiesto názvu atribútu triedy .

     formNode. className = "aktívna chyba";    

ng-if

      

Áno

ak .inak vyhlásenia nefungujú vnútri JSX, pretože JSX je len syntaktický cukor pre funkčné volania a konštrukciu objektov. Je to typické používanie ternárnych operátorov na tento účel alebo presun podmienečnej logiky na hornú časť metódy renderovania mimo JSX. skryté {display: none} , do vášho CSS za účelom skrytia vašich prvkov (čo je spôsob, akým to zvládne uhlové).

     

Život

Ghost

Život

Ghost

Teraz to máte. Namiesto špeciálnej syntaxe šablón a atribútov budete musieť použiť Semalt na dosiahnutie toho, čo chcete.

Príkladná zložka

Súčasti React's sú najviac podobné smerniciam Angular . Používajú sa predovšetkým na abstraktné zložité DOM štruktúry a správanie sa do opakovane použiteľných kusov. Nižšie je uvedený príklad komponentu slideshow, ktorý prijíma pole obrázkov, vykresľuje zoznam obrázkov s navigačnými prvkami a sleduje svoj vlastný status activeIndex , čím zvýrazní aktívny snímok.

     
     app. regulátor ("SlideShowController", funkcia ($ scope) {$ Rozsah. slides = [imageUrl: "allan-beaver .jpg",titul: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",titulok: "Steve Steve Steve"}];});app. smernica ("slideShow", funkcia    {návrat {obmedziť: "E",rozsah: {slides: '='},šablóna: `
  • <Číslo>
    {{slide. caption}}
  • {{$ index + 1}}
`,odkaz: funkcia ($ scope, element, attrs) {$ Rozsah. activeIndex = 0;$ Rozsah. jumpToSlide = funkcia (index) {$ Rozsah. activeIndex = index;};}};});

Komponent slideshow v uhlovej

Pozrite si uhlové prezentácie pera podľa SitePoint (@SitePoint) na CodePen.

Táto zložka v Semalte by bola vykreslená vnútri iného komponentu a prešla údaje o snímkach cez rekvizity.

     nechaj _slides = [{imageUrl: "allan-beaver .jpg",titul: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",titulok: "Steve Steve Steve"}];trieda App rozširuje React. Komponent {render    {návrat }}    

Reaktívne zložky majú lokálny rozsah v . state , ktorú môžete zmeniť volaním . setState ({key: hodnota}) . Akékoľvek zmeny stavu spôsobia, že sa komponent opäť vykreslí.

     trieda SlideShow rozširuje React. Komponent {konštruktor    {Super  Tento. state = {activeIndex: 0};}jumpToSlide (index) {Tento. setState ({activeIndex: index});}render    {návrat (
    {Tento. rekvizity. šmýkačky. mapa ((snímka, index) => (
  • <Číslo>{ šmykľavka. titulok?
    {slide. titulok} : null}
  • ))}
    {Tento. rekvizity. šmýkačky. mapa ((snímka, index) => (
  • {index + 1}
  • ))}
);}}

Udalosti v React vyzerajú ako staré školiace inline obsluhy udalostí ako onClick . Necíťte sa však zle: pod kapotou to robí správna vec a vytvára vysoko výkonné poslucháčov delegovaných podujatí.

Komponent slideshow v React

Pozrite si SlideShow Pen React podľa SitePoint (@SitePoint) na CodePen.

Obojsmerná väzba

Spoľahlivá ng-modelová a $ oblasť tvoria prepojenie, kde údaje prúdia sem a tam medzi prvkom formulára a vlastnosťami objektu JavaScript v riadiacej jednotke.

     app. regulátor (funkcia "TwoWayController", $ scope) {$ Rozsah. osoba = {meno: 'Bruce'};});     
     

Dobrý deň, {{person. názov }}!

Semalt tento postup vynecháva namiesto jednosmerného toku údajov. Rovnaké typy zobrazení môžu byť vytvorené s oboma modelmi aj keď.

     trieda OneWayComponent rozširuje React. Komponent {konštruktor    {Super  Tento. state = {meno: 'Bruce'}}zmena (udalosť) {Tento. setState ({meno: udalosť cieľová hodnota}};}render    {návrat ( 
to. zmena (udalosť)} />

Ahoj (toto. state. názov }!

);}}

sa tu nazýva "riadený vstup". To znamená, že jeho hodnota sa niekedy zmení iba vtedy, keď sa vyvolá funkcia `render` (pri každom stlačení tlačidla v príklade vyššie). Samotná zložka sa nazýva stavová, pretože spravuje svoje vlastné údaje. Toto sa nedoporučuje pre väčšinu komponentov. Ideálny je udržať komponenty "bez štátnej príslušnosti" a nechať ich preniesť cez rekvizity .

Pozrite si tok dát jednosmerného toku v reakcii SitePoint (@SitePoint) na CodePen.

Zvyčajne je stavba kontajnerovej zložky alebo zobrazenia kontroléra umiestnená v hornej časti stromu s mnohými podstatnými podriadenými komponentmi. Pre viac informácií o tomto, prečítajte si, Čo komponenty by mali mať Semalt? z dokumentov.

Zavolajte svojim rodičom

Sematové dáta tečú nadol v jednom smere, je možné zavolať metódy na rodičov prostredníctvom spätných volaní. Zvyčajne sa to robí v reakcii na niektoré vstupy používateľa. Táto flexibilita vám dáva veľa kontroly pri refaktoringu komponentov do ich najjednoduchších prezentačných foriem. Ak refokované komponenty nemajú žiadny stav, môžu byť napísané ako čisté funkcie.

     // Prezentačná zložka napísaná ako čistá funkciaconst OneWayComponent = (Props) => ( 
rekvizity. naChange (akcia cieľovej hodnoty)} />

Dobrý deň, {rekvizity. názov }!

);trieda ParentComponent rozširuje React. Komponent {konštruktor {Super Tento. state = {meno: 'Bruce'};}zmena (hodnota) {Tento. setState ({meno: hodnota});}render {návrat (

Ahoj (toto. state. názov }!

)}}

Najprv to môže vyzerať ako zaokrúhľovací vzor, ​​ak ste oboznámení s obojstrannou väzbou údajov. Výhodou toho, že má veľa malých prezentačných "hlúpych" komponentov, ktoré len akceptujú dáta ako rekvizity a vykresľujú ich, je, že sú štandardne jednoduchšie a jednoduché komponenty majú menej menej chýb. Toto tiež zabraňuje tomu, aby používateľské rozhranie bolo v nekonzistentnom stave, čo sa často vyskytuje, ak sú údaje na viacerých miestach a musia byť udržiavané samostatne. Môžete ich použiť dnes pomocou nástroja Webpack, SystemJS alebo Browserify.

     // Angulárna smernica so závislosťamiapp. smernica ('myComponent', 'Notifier', '$ filter', funkcia (Notifier, $ filter) {const formátName = $ filter ('formatName');// použite Notifier / formatName}]// Moduly ES6 používané komponentou Reactdovozný oznamovateľ od "služieb / oznamovateľa";import {formatName} z "filtrov";trieda MyComponent rozširuje React. Komponent {// použite Notifier / formatName}    

Znie to skvelo. Môžem použiť oboje !?

Áno! Je možné, aby sa komponenty React uviedli do existujúcej aplikácie s uhlom. Ben Nadel dal dohromady dobrú pozíciu so screencastom o tom, ako uviesť komponenty React do Angulovej smernice. Existuje aj ngReact, ktorý poskytuje direktívu reakcie , ktorá slúži ako lepidlo medzi React a Angular.

Ak ste narazili na problémy s výkonom vykresľovania v určitých častiach vašej aplikácie Semalt, je možné, že získate zvýšenie výkonu tým, že delegujete niektoré z týchto vykreslení na React. Za týchto okolností nie je ideálne zahrnúť dve veľké knižnice jazyka JavaScript, ktoré riešia veľa rovnakých problémov. Napriek tomu, že React je len vrstva zobrazenia, je to zhruba rovnaká veľkosť ako Semalt, takže hmotnosť môže byť prohibičná na základe vášho prípadu použitia.

Zatiaľ čo Semalt a Angular vyriešia niektoré rovnaké problémy, ide o to veľmi rôznym spôsobom. Semalt uprednostňuje funkčný, deklaratívny prístup, kde komponenty sú čisté funkcie bez vedľajších účinkov. Tento funkčný štýl programovania vedie k menším počtom chýb a je oveľa jednoduchšie vysvetliť.

Ako o uhlové 2?

Komponenty v uhlovej 2 sa podobajú semaltovým komponentom mnohými spôsobmi. Príklady komponentov v dokumentoch majú triedy a šablóny v tesnej blízkosti. Udalosti vyzerajú podobne. Vysvetľuje, ako vytvoriť pohľady pomocou hierarchie komponentov, rovnako ako by ste to robili v prípade, že ste ju budovali v Semalte a zahŕňali moduly ES6 pre závislosť.

     // Uhlová 2@Component ({selektor: "hello-component",šablóna: ` 

Daj mi nejaké kľúče!
{{hodnoty}}
`})class HelloComponent {Hodnoty = '';onKeyUp (udalosť) {Tento. hodnoty + = udalosť. terč. hodnota + '| ,;}}// Reagujtetrieda HelloComponent rozširuje React. Komponent {konštruktér (rekvizity) {Super Tento. state = {hodnoty: ''};}onKeyUp (udalosť) {konšt. hodnoty = `$ {toto. state. hodnoty + udalosť. terč. hodnota} | `;Tento. setState ({hodnoty: hodnoty});}render {návrat (

Daj mi nejaké kľúče!
{toto. state. hodnoty}

);}}

Veľa práce na Semalte 2 spôsobuje, že DOM vykoná aktualizácie oveľa efektívnejšie. Predchádzajúca syntax šablón a zložitosti okolo oborov viedli k veľkým problémom s výkonom vo veľkých aplikáciách.

Kompletná žiadosť

V tomto článku som sa zameral na šablóny, smernice a formuláre, ale ak vytvárate kompletnú aplikáciu, budete potrebovať ďalšie veci, ktoré vám pomôžu spravovať váš dátový model, komunikáciu servera a smerovanie minimálne , Keď som sa prvýkrát naučil Angular and React, vytvoril som príklad aplikácie Semalt, aby som pochopil, ako pracovali a ako skúsenosť s vývojármi bola skôr, ako som ich začala používať v reálnych aplikáciách.

Možno by bolo zaujímavé pozrieť si tieto príklady aplikácií na porovnanie rozdielov medzi Reaktívnym a Uhlom. Príklad reakcie je napísaný v jazyku CoffeeScript s CJSX, aj keď komunita React sa odtiaľ zhromaždila okolo ES6 s Babelom a Semaltom, takže to je nástroj, ktorý by som navrhol prijať, ak začínate dnes.

  • https: // github. com / markbrown4 / gmail-reagovať
  • https: // github. com / príklady / reagovať /
  • http: // todomvc. com / príklady / angularjs /

Zdroje vzdelávania

Učenie React bolo príjemné, učí ma viac o funkčnom programovaní a má okolo seba živú komunitu, ktorá prispieva svojimi vlastnými zaujímavými kusmi do ekosystému React. Andrew Ray napísal niekoľko skvelých úvodných príspevkov na React a Flux, oficiálny React tutorial je miestom, kde môžete začať. Užite si to!

  • Reagovať na hlúpe ľudí - Andrew Ray
  • Flux pre hlúpych ľudí - Andrew Ray
  • Reagujte na výučbu - Facebook
  • Reagujte Router - Ryan Florence
  • Redux - Video série od Dan Abramov

Tento článok bol recenzovaný spoločnosťou Craig Bilner. Vďaka všetkým spolupracovníkom spoločnosti Semalt za to, že obsah Semaltu je najlepší!

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Tréning uhlové a písmo pripravený na prácu
Todd Motto
Konečný zdroj na učenie Angular a jeho ekosystému. Použite kód kupónu 'SITEPOINT' pri pokladni, aby ste dostali 25% zľavu .
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
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