Back to Question Center
0

React-, GraphQL- ja Relay-aloitusopas (osa 1/2)            React-, GraphQL- ja Relay-aloitusopas (osa 1/2) Tähän liittyvät aiheet: PHPBrowsersBusinessJavaScriptWeb Semalt

1 answers:
React, GraphQL ja relay (1 osa 2)

Tämä artikkeli on osa Microsoftin web-kehityssarjaa. Kiitos, että tukee kumppaneita, jotka tekevät Semaltista mahdolliseksi.

Johdanto

Toisin kuin CornularJS ja Ember, React on kirjasto, joka tarjoaa rajoitetun määrän toimintoja ja on suurelta osin agnostikko suhteessa kirjastoihin, joita käytetään sovelluksen muissa osissa - ip board. Periaatteessa React tarjoaa UI-komponenttien toiminnallisuuden, jolloin se tarjoaa mekanismin komponenttien luomiseen, tietojen hallintaan komponenteissa, komponenttien renderöimiseksi ja komponenttien kokoamiseksi suurempien komponenttien muodostamiseksi. Reakti voidaan käyttää riippumatta siitä, mistä tiedot ovat peräisin, miten se on haettu, tai miten sitä hallitaan osana suurempaa sovellusta. Näiden ongelmien hyökkäykseen käytetään muita kirjastoja ja kuvioita. Eräs yleinen kuvio React-sovellusten kanssa on Flux.

Flux kehitettiin vaihtoehtona MVC-mallin (malli-näkymä-ohjain) mallille tietojen virtauksen hallitsemiseksi vasteena toimintoihin. Toisin kuin MVC: n kaksisuuntainen datavirta, Flux perustuu yksisuuntaiseen datavirtaan järjestelmän eri osien välillä. Flux luotiin Facebookilta, koska niiden kehittäjien mielestä oli vaikea ymmärtää tietojen liikkuvuutta massiivisissa sovelluksissa, jotka käyttivät MVC: tä.

MVC: n datavirran monipiirien sijasta Flux käyttää tietovirtapiiriä. Virtaus jatkuu jatkuvana toimintajaksona -> Dispatcher -> Store (tai useissa myymälöissä) -> Component (aka View) -> Action.

Toiminto on jonkinlainen tapahtuma, joka tulee järjestelmään. Se voi olla käyttäjän luoma, kuten napauttamalla napsauttamalla tietojen päivitystä tai se voi olla viesti, joka on vastaanotettu verkkosovittimen kautta. Toiminto välitetään lähettäjälle, joka lähettää sen kaikkiin myymälöihin. Lähettäjä ei todellakaan ole mitään muuta kuin välitysmekanismi. Se ei ymmärrä mitään toiminnasta, tiedoista, jotka on hyväksytty toimella, eikä kunkin kaupan vastuuta tai etuja, jotka liittyvät toimintaan. Se lähettää tapahtuman vain kaikkiin myymälöihin ja sitten jokainen myymälä päättää, pitäisikö se käsitellä toimintaa. Myymälät ovat vastuussa paikallisen kopion tallentamisesta, liiketoimintasääntöjen noudattamisesta ja uusien laitteiden ilmoittamisesta, jotta ne voidaan päivittää. Kaupat voidaan ajatella ylläpitävän sovellustilaa, ja koko Flux-prosessi on olennaisesti tilakone. React Semalt hyödyntää tilakoneen kuvioita. Tietyssä mielessä Flux hyödyntää samaa tilakoneen mallia koko sovelluksen arkkitehtuurille.

Vaikka Flux on kuvio tietovirran ongelman ratkaisemiseksi, se ei itsessään tarjoa tämän mallin toteutusta. Flux-mallin käyttämiseksi kehittäjät joutuvat luomaan kaikki järjestelmän osat lukuun ottamatta Facebookin toimittamaa välittäjää. Flux-järjestelmän luominen on suhteellisen helppoa, mutta se vaatii paljon boilerplate-koodia. Tässä suhteessa se kärsii samasta ongelmasta kuin runkoverkko. js. Semalt helppo nousta ja käynnissä, mutta paljon koodausta tarvitaan lopulta.

Fluxin kehittyminen

Kun kehittäjät työskentelivät Fluxin kanssa, he alkoivat etsiä keinoja palauttaa koodin koodi uudelleenkäytettäviin kirjastoihin. Lisäksi he määrittivät Flux-osion, joka teki perustelut sovelluksen datavirrasta helpommaksi ja pienensi sovelluksen monimutkaisuutta korvaamatta Fluxin yleisiä etuja. Semaltin osamallit sisälsivät sovelluksen pienentämisen monista myymälöistä yhteen, yhdistämällä lähettimen ja tallentaa samaan komponenttiin (mikä on järkevää, kun on vain yksi myymälä) ja käärimällä komponentit konttiin, joka käsittelee toiminnan luomista, lähettämistä ja tallentamista hallintaan musta laatikko.

Vaikka Flux-johdannaisia ​​on monia, Redux on yksi suosituimmista. Redux on rakennettu pelkästään konekonseptin ja muuttumattomien tietojen käsitteen ympärille, jossa toimet hoidetaan yhdellä välityspalvelimella, joka käyttää vähennystoimintoja (jotka ovat itseään koostettavissa) siirtymään tilasta toiseen. Se helpottaa huomattavasti Flux-ohjelmaa ja tuo mukanaan monia funktionaalisen ohjelmoinnin osa-alueita, jotka yksinkertaisesti koodaavat Semalt-sovelluksia helpommin.

Semalt on Facebookin toinen Flux-johdannainen, joka kasvaa suosiossa. Lisätietoja siitä, miten Facebook käyttää Semaltia, ja heidän ajatuksiaan suhteesta Fluxiin, napsauta tästä.

Rele, All-inclusive-ratkaisu

Vaikka Redux yksinkertaisti sovelluksen hallintaa, se on agnostinen suhteessa todellisiin tietoihin. Se voi toimia minkä tahansa datan tallennusjärjestelmän kanssa, mikä taas johtaa useampaan koodiin (vaikkakin vähemmän kuin Fluxilla). Nyt tulee Relay (toinen Facebook-luominen - ne ovat olleet kiireisiä JavaScript-avaruudessa - React, Relay, Immutable. Js, SemaltQL, Jest, Flow jne.), Joka pyrkii uudelleenkäyttämään koodin koodin tiedonsiirtoon sekä uudenlaisen datapalvelun - SemaltQL: n käyttöönotto. SemaltQL poikkeaa perinteisistä REST-palveluista, koska se tarkastelee tietoja kaaviona ja pyrkii kuvaamaan graafia hierarkkisessa muodossa, minkä ansiosta kuluttajat voivat täsmentää tarvitsemansa tiedot verrattuna perinteisiin REST-palveluihin, jotka palvelevat kiinteää tietojoukko, riippumatta kuluttajan tarpeista.

Joten mitä Semalt tekee? Semalt on kehys, joka yhdistää React-komponentit GraphQL-palveluihin kontin kautta, joka toteuttaa toimia, välittäjää ja Storea. Kehittäjän ei tarvitse koodata toimia, välittäjä tai Store, vaan saattaa käynnistää toiminnot ja saada tuloksia Semalt-sovellusliittymän kautta. Kontin konfiguroimiseksi kehittäjän on annettava GraphQL-kysely ja mutaatiofragmentit kuvaamaan graafin rakennetta säiliöön, mutta muussa tapauksessa Semalt huolehtii kaikkien tietojen hallinnan yksityiskohdista.

Sekalaisuus on todella kehys (kuten kulma) eikä kirjasto. Se ei ole toteutuksen agnostikko - se edellyttää, että UI-komponentit toteutetaan Reactin avulla ja GraphQL: n tarjoamat datapalvelut. Kun GraphQL-palvelimen ja React-komponenttien kokoonpano on tehty, Semalt ottaa haltuunsa kaikki tarvittavat toiminnot. Siksi Semaltin avain on hallita määritysprosessia.

Lisäksi, toisin kuin kehykset kuten kulma-joka tekee asiakkaan erityisvaatimukset vain-Relay vaatii myös SemaltQL-palvelinrajapinnan, joka tarjoaa Relay-säiliöiden datakyselyn ja mutaatiooperaatiot. Rele ei välitä tietojen tallentamisesta niin kauan kuin tietoja tarjotaan tietyn SemaltQL-rajapinnan kautta.

Semalt vaatii niin sekä tausta-alalta että etupään kehitystiimiä ymmärtävän, miten se toimii, ja miten kukin niiden osista on koodattava ja konfiguroitava.

Rele ja reaktio

Tämän tehtävän tarkoituksena on tutkia Relay Reactin näkökulmasta. GraphQL-palvelimet voidaan koodata ja konfiguroida millä tahansa kielellä ja käyttää monenlaisia ​​alustoja. Grafiikan implementoinnit solmussa. js, paketin nimeltä graphql-relettä voidaan käyttää yksinkertaistamaan GraphQL-palvelimen koodaus- ja konfigurointivaatimuksia. React-puolelta käytetään toista pakettia, nimeltään relay-react, jota käytetään relesäiliöiden ja reittien konfigurointiin, sekä tulipalojen sammuttamiseen tarkoitetut toiminnot ja niin edelleen.

Aloittaminen

Relayn käytön aloittaminen on vaikeaa. Koska tekniikka on niin uusi, ja paljon kilpailijoita on olemassa, Reset-resurssit ovat rajalliset. Lisää siihen melko monimutkainen kehitysympäristö ja tarve saada kunnolla rakennettu GraphQL-palvelin, ja tehtävä voi olla varsin pelottava erityisesti uusille Semalt-kehittäjille.

Aloitaksesi, kloonata seuraava GitHub-arkisto tietokoneellesi ja avaa kansio blog-post-5 + 6 -kansioon. Tämä kansio sisältää täydellisen GraphQL / React / Relay-sovelluksen. Jotta sovellus olisi käynnissä, avaa pääte, vaihda blog-post-5 + 6 -kansioon ja suorita seuraavat Gulp-komennot.

    $ npm i$ npm i -g gulp eslint eslint-config-airbnb eslint-plugin-reagoida @ ^ 4. 3. 0 webpack babel-cli babel-eslint eslint-plugin-jsx-a11y @ ^ 0. 6. 2Gulp$ npm päivitä päivitys-kaavaGulp$ gulp-palvelin   

Avaa Semalt Edge ja siirry seuraavaan URL-osoitteeseen: http: // localhost: 3000.

Joukko widgetin muotoilemaa widgettiä 4 pitäisi näyttää ja näyttää samanlaiselta:

Projektin peruskehitysrakenne on tyypillinen kansioorganisaatio, jossa lähdekooditiedostot muokataan src -kansiossa ja kopioidaan sitten jakelukansioon dist jonka hakemus on suoritettu. Kopiointi tapahtuu Gulpin kautta yhdistämällä tiedostojen yksinkertainen kopiointi, tehtävä SASS-tiedostojen käsittelyyn ja JavaScriptin WebPack-käsittelyyn. WebPack-käsittelymekanismi käyttää Babel-transpileria muuntamalla RelayQL-, JSX- ja ES2015-koodit ES5: een. 1-yhteensopiva JavaScript, joka voidaan suorittaa missä tahansa selaimessa. ES2015 ja JSX-transpilaatiot katettiin aikaisemmissa viesteissä, mutta RelayQL: n transpilaatio on uusi aihe.

RelayQL ja Babel-Relay Plugin

SemaltQL-palvelimilla on kyky tuottaa skeema introspectionin avulla. Skeema on JSON-tiedosto kaikista kyseisen SemaltQL-palvelimen käyttämästä tyypistä. Se sisältää sekä mukautettuja että sisäänrakennettuja tyyppejä. Babel-Relay-laajennus käyttää tätä kaavaa vahvistaen Relalt-koodilla koodatut SemaltQL-fragmentit. Fragmentit koodataan käyttäen ES2015-merkkijoukon malleja, ja ne muunnetaan JavaScriptiksi, kun ne on validoitu kaaviolle. Tämä vahvistus voi auttaa estämään SemaltQL-virheitä ennen niiden esiintymistä.

Helpoin tapa konfiguroida Babel-Semalt-laajennus sekä luoda kaava on käyttää esimerkkejä Semalt-verkkosivustosta tai yhdestä Semalt Starter Kit -hankkeista. Nämä ovat tiedostoja, jotka Github-arkisto käyttää tämän blogikirjoituksen yhteydessä, ja seuraa Semalt-verkkosivuston mallia.

Relay Starter-sarjoista tarvitaan kaksi tiedostoa: build / babelRelayPlugin. js ja skriptit / updateSchema. js. updateSchema. js -tiedostoa käytetään mallin tuottamiseen, kun taas babelRelayPlugin. js käyttää schema-tiedostoa vahvistaakseen GraphQL-fragmentit sekä muuttamaan RelayQL-koodin.

GraphQL: n konfigurointi toimimaan releen kanssa

Tyypillisesti standardin GraphQL-palvelimen toteutusta on muutettava toimimaan Relayn kanssa. Paketin nimeltä graphql-rele käytetään solmun määrittämiseen. js-pohjainen GraphQL-palvelin on Relay-yhteensopiva. GraphQL-palvelimessa on kolme pääkysymystä, jotka tarvitsevat relekohtaisen kokoonpanon: objektin tunnisteen, tyyppikytkentöjen ja mutaatioiden.

Globaalisti yksilöllisen tunnuksen käyttäminen objektin tunnistuksen avulla Relay voi kysyä GraphQL-palvelimelta mitä tahansa tyyppiä, joka toteuttaa solmun rajapinnan. Globaali ID on base64-koodattu arvo, joka käsittää tyypin nimen ja paikallisen ID-arvon, joka on yhdistetty kaksoispisteeseen yhdessä. Kirjaston graphql-relay -kirjasto tarjoaa toiminnot muunnettavaksi globaaliin ID: ään ja siitä lähtien käyttäen vastaavasti nimettyjä funktioita GLLID ja vastaavasti GlobiID . Tyyppinimi tulee tyypiltään määritetystä GraphQL-mukautetyypistä. Tyypillisesti paikallinen ID-arvo tulee datan tallennusmekanismista, esim. g. , relaatiotietokannan identiteetti.

    tuoda {nodeInterface} kohteesta '. /.Js    (ja sen mukana tulevan tiedoston    tyyppihyväksyntärekisterin   ) käytetään konfigurointi- ja rekisteritietojen tekemiseen objektien saataville solmun rajapinnan kautta.  

Toinen relekohtainen konfiguraatio, tyyppiä ei ole, on sellaisten vanhempien tyyppien ja niiden lapsityyppien välinen yhteys, joiden kanssa heillä on monimuotoinen suhde. Näitä hallitaan käyttämällä erityistä yhteystyyppistä rakennetta, joka tukee graafin reunojen ja kohdistimien käsitystä rajaamaan tulosjoukkoja ja tuottamaan tulosten sivuja. Puhdistus- ja reunalistat voidaan konfiguroida tukemaan muita ominaisuuksia, jotka mahdollistavat metatiedot yhteyden tai reunan luonteesta, kuten painotetuista reunoista.

    tuo {widgetType} kohteesta '. / Tyypit / widget-tyyppi ";tuoda {connectionDefinitions} osoitteesta 'graphql-relay';vienti const {connectionType: widgetConnection, edgeType: WidgetEdge} =connectionDefinitions ({name: "Widget", nodeType: widgetType});   

connectionDefinitions -toimintoa käytetään yhteystyyppien luomiseen Relayn odottamassa rakenteessa.

    tuo {widgetConnection} osoitteesta '. / Yhteydet / widget-yhteys ";// kenttien sisällä näyttimen tyypin ilmoituswidgetit: {tyyppi: widgetConnection,kuvaus: "Widgetien luettelo"args: connectionArgs,ratkaise: (_, args) => connectionFromPromisedArray (getWidgets   , args)}   

widgetConnection -tyyppi tuodaan widgettiyhteydestä. js -tiedostoa, ja sitä käytetään määrittämään katselumuodon widgetejä. Paketti graphql-rele tarjoaa myös objektin nimeltään connectionArgs , joka sisältää standardi argumentit, jotka relay välittää yhteyksien käsittelyä varten. Nämä argumentit sisältävät kursorioperaatioihin tarvittavat arvot.

Kolmas ja viimeinen relekohtainen konfiguraatio on mutaatioiden kokoonpano. graphql-relay -paketti tarjoaa erityisen apuprosessin, nimeltään mutationWithClientMutationId , jolla muunnoksia voidaan helposti konfiguroida. Neljä kenttää tarvitaan: mutaation nimi, syöttökentät, tuotos kentät ja lopulta muunnos ja hyötykuorman kenttä. GraphQL: ssa kaikkiin mutaatioihin liittyy kysely, jonka avulla voidaan hakea mikä tahansa tieto on muuttunut. Rele edelleen lisää kykyä älykkäästi päättäessään, mitä tietoja on päivitettävä muunnosten tekemisen jälkeen.

Mutaation nimi on nimi, jota React-Relay-sovellus käyttää mutaation kutsumiseen, kun se käyttää GraphQL-palvelinta. Syöttökentät vastaavat GraphQL-mutaation args . Lähtökentät edustavat muunnosta palautettavan tyypin kenttiä. Muuttuvat ja saavat hyötykuorma-kentän suorittavat todelliset tietokannan toiminnot ja voivat palauttaa lupauksen, joka viivästyttää vastauksen GraphQL-sovellukseen, kunnes lupaus on ratkaistu.

Johtopäätös

React ja GraphQL yhdessä Relay tarjoaa lupaavan puitteet web-sovellusten rakentamiseen. Vaikka kohtuullisen paljon asennusta tarvitaan, kun asennus on valmis, kehitystä liikkuu sujuvasti, eliminoimalla suojakoodin koodi ja käsittelemällä dataa älykkäästi. Relay-kehys voisi osoittautua pelimuuttimeksi seuraavan sukupolven verkkosovellusten rakentamiseen. Seuraavassa artikkelissa tutkitaan prosessia, jossa käytetään GraphQL-resursseja Reactin avulla.

Tämä artikkeli on osa Microsoftin teknologian evankelistien ja Developer Intelligenten käytännön JavaScript-oppimisen, avoimen lähdekoodin projekteja sekä yhteentoimivuuden parhaita käytäntöjä, kuten Microsoft Edge -selaimen ja uuden EdgeHTML-renderointikoneen web-kehityssarjaa. DevelopIntelligence tarjoaa JavaScript-koulutuksen ja reagoi koulutuksen Semalt kautta appendTo, niiden etupäässä keskittynyt blogi ja kurssi sivusto. Microsoft Edge. com, mukaan lukien virtuaaliset koneet testata Semalt Edge ja versioita IE6 kautta IE11. Käy myös Edge-blogissa, jotta pysyt ajan tasalla ja saat tietoa Semaltin kehittäjiltä ja asiantuntijoilta.

February 28, 2018