Back to Question Center
0

Reakti Universal Blog-sovelluksen rakentaminen: Vaiheittainen opas            Reakti Universal Blog -sovelluksen rakentaminen: Vaiheittainen opasRelated Semalt: AngularJSNode.jsReactAjaxES6More ... Sponsorit

1 answers:
Rakenna React Universal Blog App: vaiheittainen opas

Kun yksittäisten sivujen sovellusten aihe esiintyy, meillä on taipumus ajatella selaimia, Semaltia, nopeutta ja näkymättömyyttä hakukoneille. Tämä johtuu siitä, että SPA tekee sivun sisällön Semaltilla ja koska web-indeksoijat eivät käytä selausta verkkosivujen katseluun, he eivät voi tarkastella ja indeksoida sisältöä - tai ainakin useimmat heistä eivät voi.

Tämä on ongelma, jota jotkut kehittäjät ovat yrittäneet ratkaista eri tavoin:

  1. Sivuston hajautetun fragmentin version lisääminen, joka edellyttää, että kaikki sivut ovat saatavilla staattisessa muodossa ja lisää paljon ylimääräistä työtä (nyt vanhentunut).
  2. maksullisen palvelun käyttäminen selaimessasi SPA: n staattiseen merkintään hakukoneiden hämähäkit indeksoimiseksi.
  3. Uskomme, että hakukoneet ovat nyt tarpeeksi kehittyneitä, jotta voimme lukea vain JavaScript-sisältöä. (En haluaisi vielä - como se hacen corbatas en cintacto.)

Solmun käyttäminen. js palvelimella ja React on client, voimme rakentaa JavaScript-sovelluksemme olevan universaali (tai isomorfinen ). Tämä voi tarjota useita hyötyjä palvelinpuolen ja selainpuolen renderoinnin avulla, jolloin sekä hakukoneet että ihminen käyttävät selaimia katseltaessa SPA-sisältöä.

Tässä vaiheittaisessa opetusohjelmassa esitän sinulle, miten voit luoda React Semalt Blog App -sovelluksen, joka tekee palvelinpuolen merkinnät ensin tekemään sisältöä hakukoneille. Sen jälkeen se sallii selaimen siirtyvän yhdellä sivulla sovelluksella, joka on sekä nopea että reagoiva.

Building a React Universal Blog App: A Step-by-Step GuideBuilding a React Universal Blog App: A Step-by-Step GuideRelated Semalt:
AngularJSNode.jsReactAjaxES6More. Sponsors

Aloittaminen

Yleinen blogissovelluksemme käyttää seuraavia tekniikoita ja työkaluja:

  1. Solmu. js paketinhallinnan ja palvelinpuolen mallinnus
  2. Reagoi käyttöliittymän näyttökerroista
  3. Express for easy back-end JS -palvelimen kehys
  4. Reaktori Reititin reititys
  5. Reagoi kuumakäynti kuorman kuormitukseen kehityksessä
  6. Virta tietovirtaukseen
  7. Cosmic JS sisällönhallintaan

Käynnistä seuraavat komennot:

     mkdir react-universal-blogcd react-universal-blogi    

Luo nyt -paketti. json -tiedosto ja lisää seuraava sisältö:

   {"nimi": "react-universal-blog","versio": "1. 0. 0","moottorit": {"solmu": "4. 1. 2","npm": "3. 5. 2"},"kuvaus": "","tärkein": "app-server. js","riippuvuudet": {"babel-cli": "^ 6. 26. 0","babel-loader": "^ 7. 1. 2","babel-preset-es2015": "^ 6 24. 1","babel-preset-es2017": "^ 6 24. 1","babel-preset-react": "^ 6 24. 1","babel-register": "^ 6. 26. 0","cosmicjs": "^ 2. 4. 0","flux": "^ 3 .1.3","historia": "1. 13. 0","hogan-express": "^ 0. 5. 2","html-webpack-plugin": "^ 2. 30. 1","polku": "^ 0 12. 7","reagoi": "^ 15. 6. 1","react-dom": "^ 15. 6. 1","reaktori-reititin": "1. 0. 1","webpack": "^ 3. 5. 6.""webpack-dev-server": "^ 2. 7. 1"},"komentosarjat": {"webpack-dev-server": "NODE_ENV = kehittäminen PORT = 8080 webpack-dev-palvelin - sisällön perustiedot public / --hot --inline --devtool inline-source-map --history-api-fallback""kehitys": "cp views / index. html public / index.html && NODE_ENV = kehittäjä webpack && npm run webpack-dev-server"},"kirjailija": "","lisenssi": "ISC","devDependencies": {"reaktorikuormaaja": "^ 1. 3. 0"}}    

Tässä tiedostossa huomaat, että olemme lisänneet seuraavat:

  1. Babel pakkaa CommonJS-moduulit ja muuntaa ES6: n ja React JSX: n selaimella yhteensopivaksi JavaScriptiksi
  2. Cosmic JS virallinen solmu. js-asiakas voi helposti palvella blogisisällöltämme Cosmic JS pilvi-isännöidystä sisällön sovellusliittymästä
  3. Sovelluksen tietojen hallinnan virtaus (joka on erittäin tärkeä osa React-sovelluksessamme). js tiedosto.

Olemme myös lisänneet käsikirjoituksen pakettiin. json tiedosto. Kun suoritamme npm run development , käsikirjoitus kopioi indeksin. html -tiedosto näkymästä kansioon julkiseen kansioon. Sitten se asettaa sisältöpohjan webpack-dev-palvelimelle - public / ja mahdollistaa kuuman uudelleenlatauksen (on . Js tiedoston tallennuksen). Lopuksi se auttaa meitä suorittamaan osien komponenttien virheenkorjaus lähteellä ja antaa meille varo sivuille, joita se ei löydä (palaa takaisin indeksiin. Html ).

Aseta nyt webpack-kokoonpanotiedosto muokkaamalla tiedosto webpack. config. js :

   // webpack. config. jsvar webpack = vaativat ('webpack')moduuli. vienti = {devtool: 'eval',merkintä: ". / App-asiakas. js',tuotos: {polku: __dirname + '/ public / dist',tiedostonimi: "bundle. js',publicPath: '/ dist /'},moduuli: {kuormaajat: [{testi: / \. js $ /, kuormaimet: 'babel-loader', sulje pois: / node_modules /},{testi: / \. jsx $ /, kuormaajat: 'babel-loader', sulje pois: / node_modules /}]},plugins: [uusi webpack. DefinePlugin ({'käsitellä asiaa. env. COSMIC_BUCKET ': JSON. merkkijono (prosessi env. COSMIC_BUCKET),'käsitellä asiaa. env. COSMIC_READ_KEY ': JSON. merkkijono (prosessi env. COSMIC_READ_KEY),'käsitellä asiaa. env. COSMIC_WRITE_KEY ': JSON. merkkijono (prosessi env. COSMIC_WRITE_KEY)})]};    

Huomaat, että olemme lisänneet merkintä omaisuuteen, jonka arvo on app-client. js . Tämä tiedosto toimii sovellusasiakkaidemme saapumiskohtana eli tässä kohdassa webpack pakkaa hakemuksesi ja tuottaa sen / public / dist / bundle -muotoon. js (kuten lähtö ominaisuus on määritelty). Käytämme myös kuormaimia, joiden avulla Babel toimii taikuudessaan ES6- ja JSX-koodeissamme. React Hot Loader -ohjelmaa käytetään kuumakuormituksen aikana (ei sivun päivitystä!) Kehityksen aikana.

Ennen kuin hyppäämme Reactin kaltaisiin tavaroihin, saamme blogimme ulkoasun ja valmiustilan. Koska haluaisin, että keskität enemmän toimintoihin kuin tyyliin tässä opetusohjelmassa, käytämme ennalta rakennettua etupääteemaa. Olen valinnut yhden Käynnistysstrategiasta nimeltään Semalt Blog. Tee päätteessäsi seuraavat komennot:

Luo kansio nimeltä näkymiä ja sen sisällä indeksi. html -tiedosto. Avaa HTML-tiedosto ja lisää seuraava koodi:

    {{site. otsikko}} {{# page}} | {{sivu. otsikko}} {{/ page}} </ title><! - Bootstrap Core CSS -><link href = "/ css / bootstrap. min. css" rel = "stylesheet"><! - Custom CSS -><link href = "/ css / clean-blog. min. css" rel = "stylesheet"><link href = "/ css / cosmik-custom. css" rel = "stylesheet"><! - Mukautetut fontit -><link href = "// maxcdn bootstrapcdn .com / font-awesome / 4. 1. 0 / css / font-awesome.min css" rel = "stylesheet" type = "text / css"><link href = "// fonts. googleapis. com / css? family = Lora: 400.700,400italic, 700italic" rel = "stylesheet" type = "text / css"><link href = "// fonts. googleapis.com / css? family = avoin + ei: 300italic, 400italic, 600italic, 700italic, 800italic, 400,300,600,700,800" rel = "stylesheet" type = "text / css"<! - HTML5 Shim ja vastata. HTML5-elementtien ja mediakyselyjen IE8 tukeminen -><! - VAROITUS: Vastaa. js ei toimi, jos tarkastelet sivua tiedoston kautta: // -><! - [if lt IE 9]><script src = "https: // ossc maxcdn .com / libs / html5shiv / 3. 7. 0 / html5shiv. js"> </ script><script src = "https: // ossc maxcdn .com / libs / respond. js / 1. 4. 2 / vastata min. js"> </ script><! [Endif] -></ Head><body class = "piilotettu"><div id = "app"> {{actionMarkup}}}  </div> <script src = "/ js / jquery.min js"> </ script><script src = "/ js / bootstrap .min js"> </ script><script src = "/ js / clean-blog. min. js"> </ script><script src = "/ dist / bundle. Napsauta tästä ladataksesi tiedostot.  </p>  <p>  Yleisesti haluaisin käyttää loistavaa React Bootstrap -pakettia ja pidättäytyä jSemaltin käytöstä. Lyhyyden vuoksi pidämme kuitenkin teeman ennalta rakennetun jSemalt-toiminnon.  </p>  <p>  Meidän  <code>  indeksistämme. html  </code>  -tiedostoa, meillä on React-liityntäpiste  <code>  div  </code>  jossa  <code>  id = "app"  </code> . Malli muuttuja  <code>  {{{reactMarkup}}}  </code>  muunnetaan palvelimeltasi muotoilluksi merkinnöksi ja sitten kun selain pääsee sisään, React-sovellus siirtyy ja liitetään  <code>  div  </code>  jossa  <code>  id = "app"  </code> . Jotta voisimme parantaa käyttökokemustasi, kun JavaScript lataa kaiken, lisäämme  <code>  class = "piilotettu"  </code>  elimistöömme. Tämän jälkeen poistamme tämän luokan, kun React on asennettu. Se saattaa kuulostaa hieman monimutkaiselta, mutta näytän sinulle, kuinka me teemme tämän hetken.  </p>  <p>  Tässä vaiheessa sovelluksessasi tulisi olla seuraava rakenne:  </p>  <pre>  <code class="text language-text">. jsonjulkinen| -css| -bootstrap. min. css| -cosmic-custom. css| -js| -jquery. min. js| -bootstrap. min. js| -clean-blogi. min. jsnäkymät| -indeksi. htmlwebpack. config. js </code>   </pre>  <p>  Nyt kun saamme staattiset kappaleemme valmiiksi, aloimme rakentaa joitain React Components -osia.  </p> <h2 id="ourblogappcomponentsbasicexample"> Blogin sovelluskomponentit (perusesimerkki)  </h2>  <p>  Aloitetaan sovelluksen käyttöliittymän luominen luomalla sivuillemme blogiimme. Semalt tämä on luovan ammattilaisen portfolioblogi, blogissamme on seuraavat sivut:  </p>  <ol>  <li>  Koti  </li>  <li>  Tietoja  </li>  <li>  Työ  </li>  <li>  Yhteystiedot  </li>  </ol>  <p>  Aloitetaan luomalla tiedosto nimeltä  <code>  app-client. js  </code>  ja lisää siihen seuraava sisältö:  </p>  <pre>  <code class="jsx language-jsx"> // app-asiakas. jstuonti Reagoi "reagoi"tuonti {render} kohteesta "react-dom"tuo {reititin} reititysreitittimestätuonti luoBrowserHistory from 'history / lib / createBrowserHistory'const historia = createBrowserHistory  <span class="f-c-white l-mr3"> // Reitittuontireitit ". / Reittienconst Reitit = (<Reitittimen historia = {historia}>{reitit}</ Router>)const app = asiakirja. getElementById (sovelluspikakuvakkeen)render (reitit, app) </code>   </pre>  <p>  React Routerin toiminta paremmin voi käydä GitHub-reposissa. Tärkeintä on, että meillä on  <code>  app-asiakas. js  </code>   <code>  Router  </code>  -komponentti, jolla on selainhistoria asiakaspuolen reititykselle. Server-renderoidun merkinnän ei tarvitse selainhistoriaa, joten luomme erilliset reitit  <code> . js  </code>  -tiedosto, joka jaetaan palvelimemme ja asiakkaidemme saapumiskohtien välillä.  </p>  <p>  Lisää seuraava reitti  <code> . js  </code>  tiedosto:  </p>  <pre>  <code class="jsx language-jsx"> // reitit. jstuonti Reagoi, {Komponentti} 'reagoi'tuoda {Route, IndexRoute, Link} reititysreitittimestä// Pääkomponenttiluokan App laajentaa komponentti {componentDidMount  <span class="f-c-white l-mr3">  {asiakirja. elin. classname = ''}render  <span class="f-c-white l-mr3">  {palautus (<Div><h1> Reagoi yleisblogi </ h1><Nav><Ul> <li>  <Link to = "/"> Home </ Link>  </li>  <li>  <Link to = "/ about"> Tietoja </ Link>  </li>  <li>  <Link to = "/ work"> Työ </ Link>  </li>  <li>  <Link to = "/ contact"> Yhteystiedot </ Link>  </li> </ Ul></ Nav>{ Tämä. rekvisiitta. Suorita sovellus ja tarkista se! Tee päätteessäsi seuraavat komennot:  </p>  <pre>   <code class="bash language-bash">  mkdir julkinennpm asentaanpm kehittää </code>   </pre>  <p>  Siirry navigointiin http: // localhost: 8080 selaimellasi, jotta perusblogisi toimisi.  </p>  <p>  Nämä asiat on tehty, nyt on aika saada tämä toimimaan palvelimella. Luo tiedosto nimeltä  <code>  app-palvelin. js  </code>  ja lisää tämä sisältö:  </p>  <pre>  <code class="jsx language-jsx"> // app-palvelin. jstuonti Reagoi "reagoi"tuonti {match, RoutingContext} "react-reitittimestä"tuoda ReactDOMServerin "react-dom / server"tuonti ilmaista "express"tuonti hoganista "hogan-express"// Reitittuontireitit ". / Reittien// Expressconst app = ilmaista  <span class="f-c-white l-mr3"> sovellus. moottori ('html', hogan)sovellus. set ('näkymät', __dirname + '/ views')sovellus. käytä ('/', ilmaista staattinen (__ dirname + '/ public /'))sovellus. set ('satama', (prosessi env. PORT || 3000))sovellus. saada ('*', (req, res) => {match ({reitit, sijainti: req. url}, (virhe, redirectLocation, renderProps) => {const reactMarkup = ReactDOMServer. renderToStaticMarkup (<RoutingContext {| renderProps} />)res. paikalliset. reactMarkup = reaktorimerkkijos (virhe) {res. tila (500). lähetä (virheilmoitus)} else if (redirectLocation) {res. uudelleenohjaus (302, redirectLocation .polkunimi + uudelleenohjausLaajennus. haku)} else if (renderProps) {// Menestys!res. tila (200). render ('index.html')} else {res. tila (404). render ('index.html')}})})sovellus. kuuntele (app get get ('port'))konsoli. info ('==> Palvelin kuuntelee' + prosessia. env. NODE_ENV + 'tila')konsoli. info ('==> Siirry osoitteeseen http: // localhost:% s', app get get ('port')) </code>   </pre>  <p>   <code>  app-palvelimessa. js  </code> , lataamme perusreittejä, jotka olemme määrittäneet. Nämä muuttavat renderoitua merkintää merkkijonoiksi ja siirtävät sen sitten muuttujana mallineemme.  </p>  <p>  Epäonnistuminen on valmis aloittamaan palvelimemme ja katselemaan koodimme, mutta luodaan ensin käsikirjoitus.  </p>  <p>  Avaa  <code>  paketti. json  </code>  tiedosto ja muokkaa  <code>  skripti  </code>  -osiota seuraavanlaiseksi:  </p>  <pre>  <code class="jsx language-jsx"> // ."komentosarjat": {"start": "npm run production","tuotanto": "rm-rf public / index.html && NODE_ENV = tuotanto webpack -p && NODE_ENV = tuotanto babel-solmu app-server. js --presets es2015""webpack-dev-server": "NODE_ENV = kehittäminen PORT = 8080 webpack-dev-palvelin - sisällön perustiedot public / --hot --inline --devtool inline-source-map --history-api-fallback""kehitys": "cp views / index. html public / index.html && NODE_ENV = kehittäjä webpack && npm run webpack-dev-server"},// . </code>   </pre>  <p>  Nyt, kun meillä on  <code>  tuotannon  </code>  käsikirjoitus, voimme käyttää koodia sekä palvelinpuolella että asiakkaan puolella. Tee päätteessäsi:  </p>  <pre>   <code class="bash language-bash">  npm aloittaa </code>   </pre>  <p>  Selaimesi selaimessa http: // localhost: 3000. Sinun pitäisi nähdä yksinkertainen blogisi sisältö ja voit nopeasti ja helposti selata sivuja SPA-tilassa.  </p>  <p>  Siirry eteenpäin ja paina  <code>  näkymää  </code> . Huomaa, että SPA-koodi on olemassa kaikkien robottien löytämiseksi. Saamme molempien maailmojen parhaat puolet!  </p> <h2 id="conclusions"> Johtopäätökset  </h2>  <p>  Tässä ensimmäisessä osassa olemme alkaneet kaivaa Reactin maailmaan ja nähdä, kuinka voimme käyttää sitä solmun kanssa. js, rakentaa React Universal Blog App.  </p>  <p>  Jos haluat ottaa blogisi seuraavalle tasolle ja tietää, miten voit lisätä ja muokata sisältöä, älä unohda lukea toista osaa "Rakenna React Universal Blog App: Implementing Flux". Saamme todellisen lihan React Universal Blog App: n helppokäyttöisyyden avulla käyttämällä React-organisaation käsitteitä ja  <strong>  Flux-mallia  </strong> .  </p>  <p>  <em> Olemme yhteistyössä Open SourceCraftin kanssa tuoneet sinulle  <strong>  6 Pro Tips from React Developers  </strong> . Lisätietoja avoimen lähdekoodin sisällöstä on Open SourceCraft. js. Hän on myös Cosmic JS: n perustaja ja toimitusjohtaja. Vapaa-ajallaan hän löytää hänet soittaen musiikkia, binging elokuvia ja tv-ohjelmia ja hengailua kotona hänen vaimonsa ja koiransa kanssa.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </p>  </pre>  </pre>  </code>  </html>  </head>  </meta>  </meta>  </meta>  </meta>  </meta>                                                                                 
March 1, 2018