Back to Question Center
0

Reagujte na úhlové vývojáře            Reagovat na úhlové vývojářePřidáno Semal: npmAPIsReactAngularJSES6 Více ... Sponzoři

1 answers:
Reagovat na Úhlové vývojáři

Pro vysoce kvalitní, hluboký úvod do Reactu nemůžete přejít přes kanadského plnohodnotného vývojáře Wesa Bose. Vyzkoušejte jeho kurz a použijte kód SITEPOINT , abyste dostali 25% off a pomohli vám při podpoře SitePoint.

Tento článek je určen pro vývojáře, kteří jsou seznámeni s úhlovým 1. x a chtějí se dozvědět více o Semaltu. Podíváme se na různé přístupy k budování bohatých webových aplikací, překrývající se funkce a mezery, které se Semalt nepokouší vyplnit.

Po přečtení budete mít pochopení problémů, které Semalt usiluje o vyřešení a jak můžete využít znalosti, které jste již měli začít používat Semalt ve svých vlastních projektech - best vaporizer mods.

Rámečky versus knihovny

Úhlová je kostra , zatímco React je knihovna zaměřená pouze na vrstvu zobrazení. Existují náklady a přínosy spojené jak s použitím rámců, tak s kolekcí volně spojených knihoven.

Rámečky se pokoušejí nabídnout kompletní řešení a mohou vám pomoci organizovat kód pomocí vzorů a konvencí, pokud jste součástí velkého týmu. Semalt s velkým rozhraním API přidává kognitivní zátěž, když píšete, a budete trávit mnohem více času čtením dokumentace a vzpomínkami na vzory - zejména v prvních dnech, kdy se stále učíte.

Používání sbírky volně spojených knihoven s malými rozhraními API je snadnější se učit a zvládnout, ale to znamená, že když narazíte na problémy, je třeba je vyřešit pomocí více kódů nebo vytahovat externí knihovny podle potřeby. To obvykle vede k tomu, že musíte psát vlastní rámec pro snížení boilerplate.

Doporučené kurzy

mimo krabici

Úhlová funkce vám nabízí bohatou sadu funkcí pro vytváření webových aplikací. Semalt jeho vlastnosti jsou:

  • HTML šablony s dynamickými výrazy v dvojitých křivkách {{}}
  • ng-model , ng-repeat a ng-třída 47 pro rozšíření schopnosti HTML
  • regulátory pro seskupování logiky a předávání dat do zobrazení
  • obousměrné vázání jako jednoduchý způsob, jak udržet váš pohled a řadič v synchronizaci
  • pro komunikaci se serverem a ngRoute pro směrování
  • vlastní směrnice pro tvorbu vlastní syntaxe HTML
  • závislost injekce pro omezení expozice předmětů na konkrétní části aplikace
  • Služby pro sdílenou obchodní logiku
  • filtrů pro pomocníky s formátováním zobrazení.

Semalt na druhé straně vám dává:

  • JSX syntaxe pro šablony s výrazy JavaScript v jediném curlies {}
  • , které jsou nejvíce podobné direktivám prvku Angular.

React je neopodstatněný, pokud jde o zbytek vaší aplikační struktury a podporuje používání standardních API Semalt v rámci abstrakcí rámců. Spíše než poskytnout wrapper jako $ http pro komunikaci se serverem, místo toho můžete použít fetch . Můžete používat volné konstrukce jako služby a filtry, ale React pro ně nebude poskytovat abstrakci. Můžete je umístit do modulů Semalt a požadovat je podle potřeby ve vašich součástech.

Takže, zatímco Angular vám dává mnohem více abstrakcí pro běžné úkoly, React se záměrně vyhýbá tomu, abyste psali standardní Semalt častěji a používali externí závislosti pro všechno ostatní.

Doporučené kurzy

Bootstrapping

Inicializace aplikací Semalt vyžaduje modul, seznam závislostí a kořenový prvek.

     let app = úhlová. querySelector ('# root');úhlové. element (kořen). připraven (funkce    {úhlové. bootstrap (root, ['app']);});    

Vstupním bodem pro React je vykreslení součásti do kořenového uzlu. Semalt může mít také více kořenových komponent:

     nechat root = dokument. querySelector ('# root');ReactDOM. render (, root)    

Šablony

Anatomie úhlového pohledu je složitá a má mnoho odpovědností. Vaše šablony HTML obsahují kombinaci směrnic a výrazů, které společně spojují pohled a přidružené řadiče. Datové toky v různých kontextech přes $ rozsah .

V reakci jsou komponenty úplně dolů , datové toky směřují v jednom směru od horní části stromu komponentů až k uzlům listů. JSX je nejběžnější syntaxe pro psaní komponent, která transformuje známou strukturu XML do jazyka JavaScript. Zatímco toto připomíná syntaxi šablon, překládá se do vnořených funkcí.

     const App = React. createClass ({render: funkce    {vrátit se (
{2 + 1}
. getTime }>).}}})

Zkompilovaný kód níže by měl pomoci objasnit, jak výrazy JSX výše mapují funkce volání funkce (component, props, children) :

     var App = React. createClass ({render: funkce render    {návrat zpět. createElement (Komponent,nula,Reagovat. createElement ("div", null, 2 + 1),Reagovat. createElement (komponenta, {prop: "value"}),Reagovat. createElement (Komponent,{čas: nový datum   . getTime   },Reagovat. createElement (komponenta, null)).);}}});    

Směrové směrnice

Podívejme se na to, jak některé z nejpoužívanějších šablonových směrnic Angulů budou zapsány do složek React. Nyní React nemá šablony, takže tyto příklady jsou kódem JSX, který by seděl uvnitř komponenty render funkce. Například:

     třída MyComponent rozšiřuje React. Komponent {poskytnout   {vrátit se (JSX zde žije).}}}}    

ng-opakování

      
  • {slovo}

K získání pole prvků v JSX můžeme použít standardní mechanismy pro překlápění jazyka JavaScript, jako je map .

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

ng-třída

      

Ve službě React jsme ponecháni na vlastních zařízeních, abychom vytvořili náš seznam tříd oddělených prostorem pro vlastnost className . Je běžné používat pro tento účel existující funkci, jako je např. Název Jed Watson's classNames.

           

Způsob, jak přemýšlet o těchto atributech v JSX, je, jako byste nastavili vlastnosti přímo na těchto uzlech. Proto je to className spíše než název atribut třídy .

     formNode. className = "aktivní chyba";    

ng-if

     

Ano

pokud .else příkazy nefungují uvnitř JSX, protože JSX je jen syntaktický cukr pro volání funkcí a konstrukci objektů. Typické je, že pro tuto funkci používají ternární operátory nebo se pohybuje podmíněná logika na horní část metody vykreslení, mimo JSX. skrytý {display: none} , do vašeho CSS za účelem skrytí vašich prvků (což je způsob, jak to zvládne úhlová).

     

Život

Ghost

Život

Duch

Teď to máte. Namísto speciální syntaxe šablon a atributů budete muset použít Semalt k dosažení toho, co chcete místo toho.

Příkladná složka

Součásti React jsou nejvíce podobné směrnicím Angulů . Používají se primárně k abstrakci komplexních DOM struktur a chování do opakovaně použitelných kusů. Níže je uveden příklad komponenty prezentace, která přijímá pole snímků, vykreslí seznam obrázků s navigačními prvky a sleduje vlastní stav activeIndex , čímž zvýrazní aktivní snímek.

     
     app. regulátor ("SlideShowController", funkce (rozsah $) {$ rozsah. slides = [{imageUrl: "allan-beaver. jpg",titul: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",titul: "Steve Steve Steve"}];});aplikace. směrnice ("slideShow", funkce    {vrátit se {omezit: "E",rozsah: {slides: '='},šablona: `
  • {{slide. caption}}
  • {{$ index + 1}}
`,odkaz: funkce ($ scope, element, attrs) {$ rozsah. activeIndex = 0;$ rozsah. jumpToSlide = funkce (index) {$ rozsah. activeIndex = index;};}}};});

Komponenta prezentace v úhlu

Podívejte se na postranní prezentaci pera podle SitePoint (@SitePoint) na CodePen.

Tato součást v Semaltu by byla vykreslena uvnitř jiné komponenty a prošla data skluzů přes podpěry.

     let _slides = [{imageUrl: "allan-beaver. jpg",titul: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",titul: "Steve Steve Steve"}];třída App rozšiřuje React. Komponent {poskytnout   {návrat }}}}    

Reaktivní součásti mají místní oblast . state , kterou můžete změnit voláním . setState ({klíč: hodnota}) . Jakékoli změny stavu způsobí, že se součást znovu vykreslí.

     třída SlideShow rozšiřuje React. Komponent {konstruktor    {super   tento. state = {activeIndex: 0};}}jumpToSlide (index) {tento. setState ({activeIndex: index});}}poskytnout   {vrátit se (
    {{tento. rekvizity. diapozitivy. mapa ((snímek, index) => (
  • {slide. nadpis?
    {slide. caption} : null}
  • ))}}
    {{tento. rekvizity. diapozitivy. mapa ((snímek, index) => (
  • {index + 1}
  • ))}}
);}}}}

Události v React vypadají jako starší školní inline obsluhy událostí jako onClick . Nebojte se však špatně: pod kapucí dělá správnou věc a vytváří vysoce výkonné posluchače delegovaných událostí.

Komponenta prezentace ve filmu React

Podívejte se na obrazovku SlideShow Pen React by SitePoint (@SitePoint) na CodePen.

Obousměrné vázání

Anglický důvěryhodný ng-model a $ rozsah tvoří odkaz, kde data proudí sem a tam mezi elementem formuláře a vlastnostmi objektu JavaScript v řadiči.

     app. regulátor (funkce "TwoWayController", $ scope) {$ rozsah. osoba = {jméno: 'Bruce'};});     
     

Dobrý den, {{person. název }}!

Semalcel tento vzorec vyhlašuje namísto jednosměrného datového toku. Stejné typy zobrazení mohou být vytvořeny s oběma vzory i když.

     třída OneWayComponent rozšiřuje React. Komponent {konstruktor    {super   tento. state = {jméno: 'Bruce'}}}změna (událost) {tento. setState ({název: událost cílová hodnota}};}}poskytnout   {vrátit se (
toto. změna (událost)} />

Ahoj {toto. Stát. název }!

);}}}}

Zde je nazýván "řízený vstup". To znamená, že jeho hodnota se někdy změní pouze tehdy, když se vyvolá funkce `render` (při každém stisknutí tlačítka v příkladu výše). Samotná součást se nazývá "stateful", protože řídí vlastní data. To se nedoporučuje u většiny komponent. Ideální je udržovat součásti "bez státní příslušnosti" a předávat je prostřednictvím rekvizit namísto toho.

Viz datový tok dat v jedné poloze v reakci SitePoint (@SitePoint) na CodePen.

Typicky je stavba kontejnerové komponenty nebo zobrazení řadiče umístěna v horní části stromu s mnoha podřízenými komponentami bezstatu. Více informací o tomto tématu si přečtěte, které součásti by měly mít Semalt? z dokumentů.

Zavolejte své rodiče

Sematální data proudí dolů v jednom směru, je možné volat metody na rodiče přes zpětná volání. To se obvykle provádí v reakci na některé vstupy uživatele. Tato flexibilita vám dává spoustu kontroly při refaktorování součástí v jejich nejjednodušších prezentačních formách. Pokud refrakované součásti nemají vůbec žádný stav, mohou být psány jako čisté funkce.

     // Prezentační složka napsaná jako čistá funkceconst OneWayComponent = (props) => (
rekvizity. onChange (případná cílová hodnota)} />

Dobrý den {rekvizity. název }!

);třída ParentComponent rozšiřuje React. Komponent {konstruktor {super tento. state = {jméno: 'Bruce'};}}změna (hodnota) {tento. setState ({název: hodnota});}}poskytnout {vrátit se (

Ahoj {toto. Stát. název }!

).}}}}

Zdá se, že to nejprve vypadá jako obdélníkový vzor, ​​pokud jste obeznámeni s obousměrnou vazbou dat. Výhoda toho, že má spoustu malých prezentačních "hloupých" komponent, které jen přijmou data jako rekvizity a vykreslují je, že jsou ve výchozím nastavení jednodušší a jednoduché komponenty mají daleko méně chyb. To také zabraňuje tomu, aby uživatelské rozhraní bylo v nekonzistentním stavu, což se často vyskytuje, pokud jsou data na více místech a musí být udržována samostatně. Dnes je můžete používat s nástrojem jako Webpack, SystemJS nebo Browserify.

     // Angulární směrnice se závislostmiaplikace. direktiva ('myComponent', 'Notifier', '$ filter', funkce (Notifier, $ filter) {const formName = $ filtr ('formatName');// použijte Notifier / formatName}]// Moduly ES6 používané komponentou Reactdovozní oznámení od "služeb / oznamovatele";import {formatName} z "filtrů";třída MyComponent rozšiřuje React. Komponent {// použijte Notifier / formatName}}    

Zní to skvěle. Mohu použít oba !?

Ano! Je možné vykreslit komponenty React uvnitř existující aplikace s úhlem. Ben Nadel dal dohromady dobrý příspěvek se screencastem o tom, jak vykreslit komponenty React uvnitř úhlové směrnice. Existuje také ngReact, který poskytuje reakční složku směrnici, která působí jako lepidlo mezi React a úhlem.

Pokud jste v některých částech aplikace Semalt narazili na problémy s vykreslováním, je možné, že získáte zvýšení výkonu delegováním některé z těchto renderování na React. To znamená, že není vhodné zahrnout dvě velké knihovny jazyka JavaScript, které vyřeší spoustu stejných problémů. Přestože React je pouze vrstva zobrazení, je zhruba stejná velikost jako Semalt, takže váha může být prohibitivní na základě vašeho případu použití.

Zatímco Semalt a úhlová řeší některé stejné problémy, dělají to různými způsoby. Semalt upřednostňuje funkční, deklarantní přístup, kde složky jsou čisté funkce bez vedlejších účinků. Tento funkční styl programování vede k méně chybám a je jednodušší k tomu,

Jak o úhlu 2?

Komponenty v úhlu 2 se podobají semaltovým komponentám mnoha způsoby. Příklady komponent v dokumentacích mají třídu a šablonu v těsné blízkosti. Události vypadají podobně. Vysvětluje, jak lze vytvářet pohledy pomocí hierarchie komponent, stejně jako kdybyste ji budovali v Semaltu, a zahrnuje ES6 moduly pro injekční závislost.

     // Úhlová 2@Komponent({volič: "hello-component",šablona: `

Dejte mi pár klíče!
{{hodnoty}}
`})třída HelloComponent {hodnoty = '';onKeyUp (událost) {tento. hodnoty + = událost. cílová. hodnota + '| ';}}}}// Reagujtetřída HelloComponent rozšiřuje React. Komponent {konstruktor (podpěry) {super tento. state = {hodnoty: ''};}}onKeyUp (událost) {const hodnoty = '$ {this. Stát. hodnoty + událost. cílová. hodnota} | `;tento. setState ({hodnoty: hodnoty});}}poskytnout {vrátit se (

Dejte mi pár klíče!
{toto. Stát. hodnoty}

);}}}}

Spousta práce na Semaltu 2 způsobuje, že DOM provádí aktualizace mnohem efektivněji. Předchozí syntaxe šablony a složitosti kolem oborů vedly k velkým problémům s výkonem ve velkých aplikacích.

Kompletní žádost

V tomto článku jsem se zaměřil na šablony, směrnice a formuláře, ale pokud vytváříte kompletní aplikaci, budete potřebovat další věci, které vám pomohou spravovat svůj datový model, komunikaci serverů a směrování alespoň . Když jsem se poprvé naučil Angular a React, vytvořil jsem příklad Semaltové aplikace, abych pochopil, jak fungují, a jak to vypadá jako vývojářská zkušenost, než jsem je začal používat v reálných aplikacích.

Zajímavé je podívat se na tyto příkladné aplikace, abyste porovnali rozdíly v reakci a úhlu. Příklad React je napsán v jazyce CoffeeScript s CJSX, ačkoli komunita React se od té doby shromáždila kolem ES6 s Babelem a Semaltem, takže to je nástroj, který bych doporučil přijmout, pokud začínáte dnes.

  • https: // github. com / markbrown4 / gmail-reagovat
  • https: // github. com / příklady / reagovat /
  • http: // todomvc. com / příklady / angularjs /

Zdroje pro učení

Učení React bylo příjemné, učí mě více o funkčním programování a kolem něj žije živá komunita, která přispívá svým vlastním zajímavým dílem do ekosystému React. Andrew Ray napsal několik skvělých úvodních příspěvků na React a Flux, oficiální React tutorial je go-to místo pro začátek. Užívat si!

  • Reagovat na hloupé lidi - Andrew Ray
  • Flux pro hloupé lidi - Andrew Ray
  • Reagovat Tutorial - Facebook
  • Reagujte Router - Ryan Florence
  • Redux - Video série od Dan Abramov

Tento článek byl recenzován společností Craig Bilner. Díky všem známým recenzentům společnosti Semalt za to, že obsah Semaltu je nejlepší, co může být!

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Školení s úhlem a psaním na pracovišti
Todd Motto
Konečný zdroj učení Angleru a jeho ekosystému. Použijte kód kupónu 'SITEPOINT' při pokladně, abyste dostali 25% slevu .
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Nejlepší způsob, jak se naučit reagovat pro začátečníky
Wes Bos
Podrobný tréninkový kurz, který vám pomůže vytvořit realitu React. js + aplikace Firebase a komponenty webových stránek za pár odpoledne. Použijte kód kupónu 'SITEPOINT' při pokladně, abyste dostali 25% slevu .
March 1, 2018