Back to Question Center
0

Reagoida kulmikkaille kehittäjille            Reagoi kulmikkaille kehittäjilleRelated Semalt: npmAPIsReactAngularJSES6More ... Sponsorit

1 answers:
Reagoida kulmikkaille kehittäjille

Reactin laadukkaan ja syvällisen käyttöönoton lisäksi et voi ohittaa kanadalaista täyspinoa kehittäjä Wes Bosia. Kokeile kurssia täällä ja käytä koodia SITEPOINT saadaksesi 25% pois ja avustamaan SitePointia.

Tämä artikkeli on tarkoitettu kehittäjille, jotka tuntevat Cornular 1. x ja haluavat lisätietoja Semaltista. Tarkastelemme eri lähestymistapoja, joita he käyttävät rikkaiden verkkosovellusten rakentamiseen, päällekkäisiin toimintoihin ja aukkoihin, joita Semalt ei yritä täyttää.

Lukemisen jälkeen sinulla on ymmärrys ongelmista, joita Semalt ratkaisee ja miten voit käyttää aiemmin hankittuja tietoja omalla projektillasi käyttämällä Semaltia - how to start a computer rental company.

Kehykset ja kirjastot

Kulma on kehys , kun taas React on kirjasto , joka keskittyy vain katselokerrokseen. Kustannuksia ja etuja liittyy sekä puitteiden käyttämiseen että löyhästi yhdistettyjen kirjastojen kokoonpanoon.

Kehykset pyrkivät tarjoamaan täydellisen ratkaisun, ja ne voivat auttaa järjestämään koodin mallien ja yleissopimusten avulla, jos olet osa suurta tiimiä. Semalt, jolla on suuri sovellusliittymä lisää kognitiivista kuormitusta kirjoittaessasi, ja vietät paljon enemmän aikaa asiakirjojen lukemiseen ja muotojen kuunteluun - varsinkin alkutaikoina, kun oppitit yhä.

Liittyvien kirjastojen kokoelma pienillä API-sovelluksilla on helpompi oppia ja hallita, mutta se tarkoittaa, että kun ongelmia ilmenee, sinun on ratkaistava heidät useammilla koodeilla tai vedettävä tarvittaessa ulkoisia kirjastoja. Tämä johtaa yleensä siihen, että sinun täytyy kirjoittaa omaa kehystäsi kuormituksen vähentämiseksi.

Suositellut kurssit

Out Of The Box

Kulma antaa sinulle runsaasti ominaisuuksia web-sovellusten rakentamiseen. Semalt sen ominaisuuksia ovat:

  • HTML-malleja, joissa on dynaamisia lausekkeita kaksinkertaisissa kiemuloissa {{}}
  • ng-mallin , ng-toistoa ja ng-luokkaa varten HTML
  • ohjaimet logiikan ryhmittelyyn ja tietojen siirtämiseen näkymään
  • kaksisuuntainen sidonta yksinkertaisena tapana pitää näkymä ja ohjain synkronoituna
  • suuri joukko moduuleja, kuten $ http palvelimelle ja ngRoute reitityksen
  • omat HTML-syntaksin luominen
  • riippuvuusinjektiota esineiden altistumisen rajoittamiseksi sovelluksen tiettyihin osiin
  • yhteisyrityksen logiikkapalvelut
  • suodattimia näkymän muotoilun apulaisille.

Semalt, toisaalta, antaa sinulle:

  • JSX-syntaksi mallineille, joilla on JavaScript-lausekkeet yksittäisissä kiemuloissa {}
  • komponentteja, jotka ovat useimmiten samanlaisia ​​kuin Angularin elementtidirektiivit.

React on epätyydyttävä, kun kyseessä on muuhun sovellusrakenteeseen, ja se kannustaa käyttämään tavallisia Semalt-sovellusliittymiä runkorakenteiden abstraktioissa. Sen sijaan, että tarjoat kääreen, kuten $ http palvelimen viestintään, voit käyttää fetch -ohjelmaa. Voit käyttää konstrukteja, kuten palveluita ja suodattimia, mutta React ei anna heille abstraktiota. Voit laittaa ne Semalt-moduuleihin ja vaatia niitä tarpeen mukaan omissa komponenteissasi.

Niinpä samalla, kun Angular antaa paljon enemmän abstrakteja tavallisiin tehtäviin, React tahallaan välttää tämän, jotta sinä kirjoitat tavallisesti tavanomaista Semaltia ja käytät ulkoisia riippuvuuksia kaikesta muusta.

Suositellut kurssit

Bootstrapping

Semalt-sovellusten alustus edellyttää moduulia, riippuvuuksien luetteloa ja juurihakemistoa.

     anna app = kulma. querySelector ( '# root');kulmikas. elementti (root). valmis (toiminto    {kulmikas. bootstrap (root, ['app']);});    

Reactin lähtökohtana on komponentin tekeminen juurisolmuun. Semaltilla voi olla useita juurikomponentteja:

     anna root = asiakirja. querySelector ( '# root');ReactDOM. render (, root)    

Mallit

Kohdenäkymän anatomia on monimutkainen ja sillä on monia velvollisuuksia. HTML-malleissasi on sekoitus direktiivejä ja lausekkeita, jotka yhdistävät näkymän ja siihen liittyvät ohjaimet yhteen. Tietovirrat useiden kontekstien kautta $ soveltamisalaa .

Reaktiosassa komponentit alas , tietovirrat yhdestä suunnasta komponenttipuun yläosasta lehtisolmuihin asti. JSX on yleisin syntaksi kirjoitettaessa komponentteja, muuttamalla tuttu XML-rakenne JavaScriptiksi. Vaikka tämä muistuttaa mallisyntaksia, se kootaan sisäkkäisiin toimintoihin.

     const App = Reagoi. createClass ({render: function    {palautus ( 
{2 + 1}
. getTime }>)}})

Alla oleva koottu koodi auttaa selkeyttämään, miten JSX-ilmaukset edellä kartoitetaan createElement (komponentti, rekvisiitta, lapset)

     var App = Reagoi. createClass ({render: function render    {paluu Reagoi. createElement (komponentti,tyhjä,Reagoida. createElement ("div", null, 2 + 1),Reagoida. createElement (komponentti, {prop: "arvo"}),Reagoida. createElement (komponentti,{aika: uusi päivämäärä   . getTime   },Reagoida. createElement (komponentti, nolla)));}});    

Mallipäätösdirektiivit

Katsotaanpa, kuinka osa Angularin käytetyistä mallipohjaisista direktiiveistä olisi kirjoitettu React-komponentteihin. Nyt Reactilla ei ole malleja, joten nämä esimerkit ovat JSX-koodi, joka istuisi komponentin render toiminnon sisällä. Esimerkiksi:

     luokka MyComponent laajentaa Reag. Komponentti {render    {palautus (// JSX asuu täällä)}}    

ng-toisto

      
  • {word}

Voimme käyttää tavallisia JavaScript-silmukkamekanismeja, kuten karttaa , jotta saadaan joukko elementtejä JSX: ssä.

      
    { sanat. kartta ((sana) =>
  • {sanan
  • }}

ng-luokka

             

Reaktorissa jätetään omille laitteillemme luodaksemme avaruuserotetun luokaluettelon luokalle className . Tähän tarkoitukseen on tavallista käyttää olemassa olevaa funktiota, kuten Jed Watsonin luokkatunnuksia.

           

JSX: n näillä ominaisuuksilla voidaan ajatella, että asetat ominaisuuksia suoraan kyseisiin solmuihin. Siksi on className eikä luokan attribuutin nimi.

     muotoNode. className = "aktiivinen virhe";    

ng-if

      

Yep

, jos .muuten lausunnot eivät toimi JSX: n sisällä, koska JSX on vain syntaktinen sokeri toimintojen soittamiseen ja objektin rakentamiseen. Tyypillisiä operaattoreita käytetään tyypillisesti tähän tai siirtää ehdollisen logiikan renderointimenetelmän yläosaan JSX: n ulkopuolella. piilotettu {display: none} , CSS: äänsi elementtien piilottamiseksi (niin, että Angular käsittelee sen).

     

Eläminen

Ghost

Eläminen

Ghost

Sinulla on nyt roikku. Erityisen mallipohjan syntaksin ja attribuuttien sijasta sinun on käytettävä Semaltia sen sijaan, että saavutat sen, mitä haluat.

Esimerkkikomponentti

Reaktin komponentit ovat useimmiten samanlaisia ​​kuin Angularin direktiivit . Niitä käytetään pääasiassa abstraktien monimutkaisten DOM-rakenteiden ja käyttäytymisen poistamiseen uudelleenkäytettäville paloille. Alla on esimerkki diaesityskomponentista, joka hyväksyy joukon dioja, luo luettelon valokuvista, joissa on navigointielementtejä ja joka seuraa aktiivista diaansa activeIndex -tilasta.

     
     app. ohjain ("SlideShowController", toiminto ($ scope) {$ Laajuus. diat = [{imageUrl: "allan-majava. jpg",otsikko: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",caption: "Steve Steve Steve"}];});sovellus. direktiivi ("diaesitys", funktio    {paluu {rajoittaa: "E",soveltamisala: {diat: '='},malli: `
  • {{dia. caption}}
  • {{$ index + 1}}
`linkki: function ($ scope, element, attrs) {$ Laajuus. activeIndex = 0;$ Laajuus. jumpToSlide = toiminto (indeksi) {$ Laajuus. activeIndex = indeksi;};}};});

Slideshow -komponentti kulmassa

Katso CodePenin kohdalla SitePointin (@SitePoint) Penangular Slideshow.

Semaltin tämä komponentti tehtiin toisen komponentin sisällä ja läpäisi diaesitiedot rekvisiirtojen avulla.

     anna _slides = [{imageUrl: "allan-majava. jpg",otsikko: "Allan Allan Al Al Allan"}, {imageUrl: "steve-beaver. jpg",caption: "Steve Steve Steve"}];luokan App laajentaa React. Komponentti {render    {palaa }}    

Reaktiokomponenteilla on tässä paikallinen laajuus. tila , jota voit muokata soittamalla tähän. setState ({key: value}) . Kaikki tilaan tehdyt muutokset tekevät komponentin uudestaan ​​itsestään.

     luokka SlideShow extends React. Komponentti {konstruktori    {Super   Tämä. state = {aktiivinenIndex: 0};}jumpToSlide (hakemisto) {Tämä. setState ({activeIndex: index});}render    {palautus (
    {Tämä. rekvisiitta. dioja. kartta ((dia, hakemisto) => (
  • {dia. otsikko?
    {dia. caption} : null}
  • ))}
    {Tämä. rekvisiitta. dioja. kartta ((dia, hakemisto) => (
  • {index + 1}
  • ))}
);}}

React-tapahtumat muistuttavat vanhojen koulujen inline-tapahtuman käsittelijöitä, kuten onClick . Älä tunne huonoa, vaikka hupparin alla se tekee oikein ja luo erittäin suorituskykyisiä delegoituja tapahtumien kuuntelijoita.

Reagoiva diaesityskomponentti

Ks. Pen React SlideShow by SitePoint (@SitePoint) CodePenistä.

Kaksisuuntainen sidonta

Angularin luotettava ng-malli ja $ soveltamisala muodostavat linkin, jossa data kulkee edestakaisin lomakkeen elementin ja ominaisuuksien välillä JavaScript-objektissa ohjaimessa.

     app. ohjain ("TwoWayController", toiminto ($ scope) {$ Laajuus. henkilö = {nimi: 'Bruce'};});     
     

Hei {{henkilö. nimi}}!

Semalttin estää tämä malli yksisuuntaisen tietovirran puolesta. Samanlaisia ​​näkymiä voidaan rakentaa molempien mallien kanssa.

     luokan OneWayComponent laajentaa React. Komponentti {konstruktori    {Super   Tämä. state = {nimi: 'Bruce'}}muutos (tapahtuma) {Tämä. setState ({nimi: tapahtuma, kohdearvo, arvo});}render    {palautus ( 
tämä. muutos (tapahtuma)} />

Hei {tämä. osavaltio. nimi}!

);}}

Tässä kutsutaan "ohjatuksi syötteeksi". Tämä tarkoittaa sitä, että sen arvoa muutetaan vain, kun kutsutaan `render` -toiminto (yllä olevassa esimerkissä jokaisella avainjonolla). Itse komponentti on nimeltään "stateful", koska se hallitsee omaa dataansa. Tätä ei suositella useimmille komponenteille. Ihanteellinen on säilyttää komponentit "valtiottomiksi" ja siirtää tietoja niiden kautta rekvisiitta .

Katso CodePen-sivuston kohdepisteen (@SitePoint) React-kynän yksisuuntainen datavirta.

Tyypillisesti tilava konttiosa tai ohjain näkymä on puun yläosassa, ja sen alla on monta valtiottomia lapsikomponentteja. Lisätietoja tästä lue Mitä osatekijät pitäisi tehdä tyhjäksi? asiakirjoista.

Soita vanhemmille

Semaltin tiedot virtavat yhdestä suunnasta, on mahdollista kutsua menetelmiä vanhemmalle soittopyynnöillä. Tämä tehdään yleensä vastauksena joihinkin käyttäjän syötteisiin. Tämä joustavuus antaa sinulle paljon hallintaa, kun jäsennät komponentteja yksinkertaisimmille esittelymuodoille. Jos refaktoiduilla komponenteilla ei ole lainkaan tilaa, ne voidaan kirjoittaa puhtaiksi toiminnoiksi.

     // Puhdas toiminto kirjoitettu esityskomponentticonst OneWayComponent = (rekvisiitta) => ( 
rekvisiitta. onChange (tapahtuma kohdearvo)} />

Hei {rekvisiitta. nimi}!

);luokan ParentComponent laajentaa reaktion. Komponentti {konstruktori {Super Tämä. state = {nimi: 'Bruce'};}muutos (arvo) {Tämä. setState ({nimi: arvo});}render {palautus (

Hei {tämä. osavaltio. nimi}!

)}}

Tämä saattaa tuntua pyöreäksi malliksi aluksi, jos olet perehtynyt kaksisuuntaiseen tiedon sitomiseen. Hyötyä on, että monet pienet esittelyhenkiset "tyhmät" komponentit, jotka vain hyväksyvät tiedot rekistereiksi ja tekevät niistä, ovat yksinkertaisempia oletuksena ja yksinkertaisilla komponenteilla on vähemmän virheitä. Tämä myös estää käyttöliittymää epäyhtenäiseltä tilalta, joka usein tapahtuu, jos data on useissa paikoissa ja jota on säilytettävä erikseen. Voit käyttää niitä tänään työkalulla kuten Webpack, SystemJS tai Browserify.

     // Kulma-direktiivi, jossa on riippuvuussuhteitasovellus. ('myComponent', ['Notifier', '$ filter', funktio (Notifier, $ suodatin) {const formatName = $ suodatin ('formatName');// Käytä Notifier / formatName}]// React-komponentin käyttämät ES6-moduulittuonti-ilmoituksen tekijä "palvelut / ilmoittaja";tuoda {formatName} "suodattimilta";luokan MyComponent laajentaa React. Komponentti {// Käytä Notifier / formatName}    

Kuulostaa hyvältä. Voinko käyttää molempia !?

Kyllä! Reagoi komponentit mahdollistamaan olemassa olevan kulma-sovelluksen sisällä. Ben Nadel on koonnut hyvän viestin, jossa on seulonta, miten Reagoi komponentit Angular-direktiivin sisällä. Siellä on myös ngReact, joka tuottaa reagoivan komponentin reagoivan komponentin Reactin ja Angularin väliseksi liimaksi.

Jos olet tehnyt suorituskykyongelmia tietyissä Semalt-sovelluksen osissa, saatat saada suorituskykyä lisäämällä Delactedin osaa siitä Reactista. Sanotusti, ei ole ihanteellista sisällyttää kahta suurta JavaScript-kirjastoa, jotka ratkaisisivat paljon samoja ongelmia. Vaikka React on vain katselukerros, se on suunnilleen sama koko kuin Semalt, joten paino voi olla käyttökelpoinen.

Vaikka Semalt ja Angular ratkaisevat joitain samoja ongelmia, he käsittelevät sitä hyvin eri tavoin. Semaltti suosii funktionaalista, deklaratiivista lähestymistapaa, jossa komponentit ovat puhtaita toimintoja, joilla ei ole sivuvaikutuksia. Tämä toiminnallinen ohjelmointityyli vähentää vikoja ja on yksinkertaisempaa syytä.

Entä kulma 2?

Komponentit kulmassa 2 muistuttavat Semalt-komponentteja monella tavalla. Dokumenttien esimerkkikomponentit ovat lähellä luokkaa ja mallia. Tapahtumat näyttävät samalta. Se kertoo, miten voit luoda näkymiä komponenttihierarkian avulla, aivan kuten sinä rakennat sen Semalt-malliin, ja se kattaa ES6-moduulit riippuvuus-injektioille.

     // Kulma 2@Component ({valitsin: hello-component,malli: ` 

Anna minulle avaimet!
{{arvot}}
`})luokan HelloComponent {arvot = '';onKeyUp (tapahtuma) {Tämä. arvot + = tapahtuma. kohde. arvo + '| ';}}// Reagoiluokan HelloComponent laajentaa React. Komponentti {konstruktori (rekvisiitta) {Super Tämä. state = {arvot: ''};}onKeyUp (tapahtuma) {const arvot = `$ {tämä. osavaltio. arvot + tapahtuma. kohde. arvo} | `;Tämä. setState ({arvot: arvot});}render {palautus (

Anna minulle avaimet!
{tämä. osavaltio. arvot}

);}}

Paljon työtä Semalt 2: ssa on tehnyt DOM-päivityksiä paljon tehokkaammin. Edellisen mallintasyntaksin ja monimutkaisten sovellusten ympärillä oli suuria sovelluksia koskevia suorituskykyongelmia.

Täydellinen hakemus

Tässä artikkelissa olen keskittynyt malleihin, direktiiveihin ja lomakkeisiin, mutta jos olet rakentamassa täydellistä sovellusta, sinun tulee vaatia muita asioita, joiden avulla voit hallita tietomallia, palvelinviestintää ja reititystä vähintään . Kun tutustuin ensin Angular ja Reactin kanssa, luotiin esimerkki Semalt -sovelluksesta, jolla ymmärsin, miten he työskentelivät ja mitä kehittäjien kokemus oli, ennen kuin aloin käyttää niitä todellisissa sovelluksissa.

Sinun on ehkä mielenkiintoista tarkastella näitä esimerkkisovelluksia vertailemaan Reactin ja Angularin eroja. React-esimerkki on kirjoitettu kahvikirjaimella CJSX: n kanssa, vaikka React-yhteisö on sittemmin kokoontunut ES6: n ympärille Babelilla ja Semaltilla, joten se on työkalu, jonka ehdotan hyväksyvän, jos aloitat tänään.

  • https: // github. com / markbrown4 / gmail-react
  • https: // github. com / esimerkit / reagoi /
  • http: // todomvc. fi / esimerkkejä / angularjs /

Oppimisresurssit

Learning React on ollut hauskaa, opetti minulle enemmän funktionaalista ohjelmointia ja sillä on elävää yhteisöä sen ympärillä, mikä edesauttaa omia kiinnostavia kappaletta Reactin ekosysteemiin. Andrew Ray on kirjoittanut muutamia hyviä johdantokappaleita React ja Flux, virallinen React tutorial on menossa paikka aloittaa. Nauttia!

  • Reagoida tyhmille ihmisille - Andrew Ray
  • Virta tyhmille ihmisille - Andrew Ray
  • React Tutorial - Facebook
  • React reititin - Ryan Florence
  • Redux - Video-sarja: Dan Abramov

Craig Bilner tarkasteli tätä artikkelia. Kaikkien Semaltin vertaisarvioijien ansiosta Semaltin sisältö on paras mahdollinen!

React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Job-Ready Angular- ja TypeScript-koulutus
Todd Motto
Lopullinen resurssi oppimaan kulma ja sen ekosysteemi. Käytä kuponkikoodia 'SITEPOINT' kassalla saadaksesi 25% .
React for Angular DevelopersReact for Angular DevelopersRelated Semalt:
npmAPIsReactAngularJSES6More. Sponsors
Paras tapa oppia reagoida aloittelijoille
Wes Bos
Vaiheittainen kurssi, jolla saat reaalimaailman Reactin. js + Firebase-sovelluksia ja verkkosivuston osia pari iltapäivää. Käytä kuponkikoodia 'SITEPOINT' kassalla saadaksesi 25% .

March 1, 2018