Back to Question Center
0

React Universal Brawl App бүтээх: Алхам алхмаар удирдамж            React Universal Brawl App бүтээх: Алхам алхмаар гарын авлага Холбоо барих Semalt: AngularJSNode.jsReactAjaxES6Илүү ... Ивээн тэтгэгч

1 answers:
Баяр хүргэе Universal Блог App: Алхам алхмаар гарын авлага

Нэг хуудсын хэрэглээний сэдэв (SPA) сэдэв гарч ирэхээр бид хайлтын хөдөлгүүрүүдэд хөтөч, semalt, хурд, ухагдахууны талаар бодох хандлагатай байдаг. Яагаад гэвэл SPA нь вэбсайтыг вэбсайтыг үзэхийн тулд вэб хөтөч ашиглахгүй учраас вэбсайтыг вэбсайтыг харах боломжгүй, эсвэл хамгийн багаар бодоход тэдгээрийг индексжүүлэх боломжгүй.

Энэ нь зарим хөгжүүлэгчид янз бүрийн аргаар шийдэхийг оролдож байгаа асуудал юм:

  1. Вэбсайтын зугтах фрагментийг нэмэх, бүх хуудсыг статик хэлбэрээр ашиглахыг шаарддаг, маш олон нэмэлт ажил (одоо хуучирсан) нэмдэг.
  2. ТХГН-ийг хамгаалалтад авахын тулд хайлтын системийн аалзнуудыг статик тэмдэглэгээнд оруулахын тулд төлбөрт үйлчилгээний төлбөрийг ашигладаг.
  3. Эдгээр хайлтын системүүд нь бидний JavaScript-ийн агуулгыг унших хангалттай боловсронгуй болсон гэдэгт итгэлтэй байна. (Би зүгээр л тийм биш байна - fastest vps servers.)

Node ашиглан ашиглах. js дээр сервер дээр Үйлчлүүлэгч дээр хариу үйлдэл үзүүлж, бидний JavaScript аппыг нийтэд түгээх (эсвэл isomorphic байх болно. Энэ нь сервер талд болон хөтөчийн талаас үзүүлэх хэд хэдэн давуу талыг санал болгодог бөгөөд бидний хайлтын систем болон хүн браузер ашиглан манай ДЦГ-ын агуулгыг үзэх боломжийг олгодог.

Энэхүү алхмын хичээлд би React Semalt Blog App-г хэрхэн бүтээхийг танд үзүүлэх болно. Ингэснээр серверийн нүүрэн дэх бидний агуулга нь хайлтын системд ашиглах боломжийг олгоно. Дараа нь, хөтөч нь хурдан, хариу үйлдэлтэй аль ч хуудсанд програмыг ашиглах боломжийг олгох болно.

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

Эхлэх

Манай түгээмэл блог апп дараах технологи, хэрэгсэлийг ашиглах болно:

  1. Зангилаа. js багц зохицуулалт болон сервер талын рэндэр
  2. UI үзэхэд дахин ашиглах
  3. Илүү хялбар JS-серверийн хүрээг илэрхийлэх
  4. Чиглүүлэгчийн чиглүүлэгчийг дахин эхлүүлэх
  5. Хөгжиж буй халуун ачааллын хувьд халуун ачаалагчийг дахин эхлүүлэх
  6. Өгөгдлийн урсгалын урсгал
  7. Агуулгын удирдлагад Cosmic JS

Эхлээд дараах тушаалуудыг ажиллуулна:

     mkdir урвалд нийтээр-блогcd урвалд нийтээр-блог    

Одоо багцыг үүсгээрэй. json файл болон дараах контент нэмэх:

   {"нэр": "урвалд нийтээр-блог","хувилбар": "1. 0. 0","хөдөлгүүр": {"зангилаа": "4. 1. 2","npm": "3. 5. 2"},"тайлбар": "","гол": "апп-сервер. js","хамааралтай": {"babel-cli": "^ 6 26. 0","babel-loader": "^ 7." 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","урсгалын": "^ 3 .1 3","түүх": "1. 13. 0","hogan-express": "^ 0. 5. 2","html-webpack-plugin": "^ 2 .30. 1","зам": "^ 0. 12. 7","хариу үйлдэл": "15.1.6", ""хариу-дом": "^ 15. 6. 1","урвалд чиглүүлэгч": "1. 0. 1","webpack": "^ 3. 5. 6","webpack-dev-server": "^ 2. 7. 1"},"скриптүүд": {"webpack-dev-server": "NODE_ENV = хөгжүүлэх PORT = 8080 webpack-dev-server - content-base public / --hot --inline --devtool inline-source-map - history-api-fallback","хөгжүүлэлт": "cp үзэлт / индекс. html public / index. html && NODE_ENV = хөгжүүлэх вэбpack && npm ажиллуулах вэбpack-dev-server"},"зохиогч": "","лиценз": "ISC","devDependencies": {"урвалын халуун-дуудагч": "^ 1 .3 0"}}    

Энэ файлд бид дараах зүйлсийг нэмж оруулсан болохыг анхаарна уу:

  1. Babel манай CommonJS модулиудыг багцалж, манай ES6 болон React JSX-ийг браузертай нийцтэй Javascript болгон хувиргах
  2. JS Cosmic албан ёсны Node. js клиент нь бидний блогын агуулгыг амархан Cosmic JS үүлд hosted контент API
  3. Апп-ийн өгөгдлийн удирдлагад зориулсан урсгалын (бидний React програмд ​​маш чухал элемент юм). js файл.

Бид бас багцад скрипт нэмж оруулсан. json файл. Бид (npm) хөгжүүлэлтийн ажиллуулахад скрипт нь индексийг хуулдаг. Манай олон нийтийн хавтас фолдерт манай үзсэн фолдероос html файл. Дараа нь бидний webpack-dev-server -аас public / гэсэн агуулгын баазыг тавьдаг бөгөөд (62). Js файлыг хадгалах) дээр дахин ачаалах боломжийг олгодог. Эцэст нь, бидний бүрэлдэхүүн хэсгүүдийг эх сурвалжаа дибаг хийх, бидэнд олох боломжгүй хуудсуудад унах боломжийг олгодог index (html ).

Одоо файлын тохиргооны файлаа webpack файлаа засаад үзье. config. js :

   // webpack. config. jsvar webpack = шаардлагатай ('webpack')модуль. экспорт = {devtool: 'eval',нэвтрэх: '. / апп-клиент. js ',гарц: {зам: __dirname + '/ public / dist',файлын нэр: 'bundle. js ',publicPath: '/ dist /'},модуль: {ачигч: [{тест: / \. js $ /, loaders: 'babel-loader', хасах: / node_modules /},{тест: / \. jsx $ /, loaders: 'babel-loader', хасах: / node_modules /}]},залгаасууд: [шинэ вэбсайт. DefinePlugin ({'процесс. env. COSMIC_BUCKET ': JSON. String (процесс. env. COSMIC_BUCKET),'процесс. env. COSMIC_READ_KEY ': JSON. String (процесс. env. COSMIC_READ_KEY),'процесс. env. COSMIC_WRITE_KEY ': JSON. String (процесс. env. COSMIC_WRITE_KEY)})]};    

Бид оролт хөрөнгийг app-client-ийн үнээр нэмсэнийг бид анзаарах болно. js . Энэ файл нь манай хэрэглэгчийн нэвтрэх цэг болж үйлчилдэг бөгөөд энэ үед вебсайп нь бидний програмыг багцалж, үүнийг / public / dist / bundle руу хүргэх болно. js гаралт -д тодорхойлсноор). Бид бас Бабелийг ES6 ба JSX код дээрээ ид шидээ ажиллуулахын тулд ачигчдыг ашигладаг. React Hot Loader нь хөгжүүлэлтийн үеэр халуун ачаалалтай (хуудасны ямар ч refresh!) Ашиглагддаг.

React-тэй холбоотой зүйлсийг үсрэхээс өмнө манай блог бэлэн боллоо. Энэ гарын авлагаас хэв маягаас илүү функц дээр илүү анхаарал төвлөрүүлэхийг хүсч байгаа болохоор энд урьдчилан урьдчилан бүтээсэн урд талын сэдэв ашиглах болно. Би эхлээд "Bootstrap" -ийг семальт блог гэж нэрлэсэн. Таны терминал дээр дараах тушаалуудыг ажиллуулна:

үзсэн хавтас ба дотор нь индекс гэж нэрлэдэг фолдер үүсгээрэй. html файл. HTML файлыг нээж, дараах кодыг нэмнэ:

    {{сайт. нэр}} {{# хуудас}} | {{хуудас. нэр}} {{/ хуудас}} </ title><! - Bootstrap Core CSS -><link href = "/ css / bootstrap" .mss "rel =" stylesheet "><! - Custom CSS -><link href = "/ css / clean-блог" .mss "rel =" stylesheet "><link href = "/ css / cosmic-custom. css" rel = "stylesheet"><! - Гаалийн фонт -><link href = "// maxcdn.bootstrapcdn com / font-awesome / 4 1. 0 / css / font-awesome .mss css" rel = "stylesheet" type = "text / css"><link href = "// фонт. googleapis.com / css? family = Lora: 400,700,400italic, 700italic" rel = "stylesheet" type = "текст / css"><link href = "// fonts. googleapis.com / css? family = Нээлттэй + Sans: 300italic, 400italic, 600italic, 700italic, 800italic, 400,300,600,700,800" rel = "stylesheet" type = "text / css"><! - HTML5 Шим болон хариулах. js IE8 дэмжлэг HTML5 элементүүд болон медиа асуулга -><! - АНХААРУУЛГА: Хариулаа. Хэрэв та хуудсыг хуудаснаас харвал js ажиллахгүй байна: // -><! - [if lt IE 9]><script src = "https: // oss maxcdn com / libs / html5shiv / 3. 7. 0 / html5shiv. js"> </ script>js "> </ script> <script src =" https: // oss maxcdn com / libs / respond js /<! [endif] -></ head><body class = "hidden"><div id = "app"> {{{reactMarkup}}}  </div> <script src = "/ js / jquery. min js"> </ script><script src = "/ js / bootstrap.js"> </ script><script src = "/ js / clean-blog.js"> </ script><script src = "/ dist / сагс. Файлуудыг татаж авахын тулд энд дарна уу.  </p>  <p>  Ерөнхийдөө би гайхамшигтай React Bootstrap багцыг ашиглаад jSemalt ашиглана уу. Гэсэн хэдий ч богино хугацаанд бид сэдэвчилсэн jSemalt функцийг хадгалах болно.  </p>  <p>  Манай  <code>  индекс дээр. html  </code>  файлыг бид  <code>  div  </code>  дээр тавьсан React холболтын цэгийг  <code>  id = "app"  </code>  дээр үүсгэх болно. Загвар хувьсагч  <code>  {{{reactMarkup}}}  </code>  нь бидний серверт хийгдсэн тэмдэглэгээ рүү хөрвүүлэгдэж, дараа нь хөтөч нь ачаалах үед бидний React програм нь  <code>  div  </code>   <code>  id = "app"  </code> . Хэрэглээний туршлагыг сайжруулахын тулд бидний JavaScript бүх зүйлийг ачаалж байхад бидний  <code>  class = "далд"  </code>  -ийг нэмж өгдөг. Дараа нь бид React холболтыг нэг удаа устга. Энэ нь жаахан төвөгтэй санагдаж магадгүй ч яаж үүнийг яаж хийх вэ гэдгээ харуулах болно.  </p>  <p>  Энэ үед таны апп дараах бүтэцтэй байх ёстой:  </p>  <pre>  <code class="text language-text"> багц. jsonнийтийн-с| - хөтөч мин. css-Космик-заншил. css-js-мэдээлэл. мин. js| - хөтөч мин. js-цэвэр-блог. мин. jsүзэл бодол-index. htmlwebpack. config. js </code>   </pre>  <p>  Одоо бид статик хэсгүүдийг хийчихсэн байгаа тул зарим React Components-ийг бүтээхээр болъё.  </p> <h2 id="ourblogappcomponentsbasicexample"> Бидний блог App бүрэлдэхүүн (Үндсэн жишээ)  </h2>  <p>  Манай блогт зориулсан вэб хуудсуудыг тохируулснаар манай апп-ийн UI-г байгуулж эхлье. Semalt энэ нь бүтээлч мэргэжлийн багцын блог байх болно, манай блог дараах хуудсуудтай байх болно:  </p>  <ol>  <li>  Нүүр хуудас  </li>  <li>  тухай  </li>  <li>  Ажил  </li>  <li>  Холбоо барих  </li>  </ol>  <p>  App-client  <code>  гэж нэрлэгдсэн файл үүсгэж эхлээрэй. js  </code>  болон дараах агуулгатай байна:  </p>  <pre>  <code class="jsx language-jsx"> // апп-клиент. jsимпортлох 'хариу үйлдэл'импортлох {р рт-дом}import {чиглүүлэгч} репорт чиглүүлэгчээсимпорт үүсгэхБусад түүх 'түүх / lib / createBrowserХүүхээс'const history = createBrowserHistory  <span class="f-c-white l-mr3"> // Чиглэлүүдимпортлох замууд '. / чиглүүлэлтүүдconst Routes = (<Router history = {history}>{маршрут}</ Чиглүүлэгч>)const app = баримт бичиг. getElementById ('app')render (Чиглэл, програм) </code>   </pre>  <p>  Чиглүүлэгчийн реактор хэрхэн ажилладаг талаар илүү сайн ойлгохын тулд та өөрийн GitHub репо-д зочилж болно. Гарт нь бид  <code>  апп-клиент дээр байгаа юм. js  </code>  our  <code>  Бидний клиент талын чиглүүлэлтийн хөтөчийн түүх бүхий чиглүүлэгч  </code>  бүрэлдэхүүн. Манай серверийн тэмдэглэгээ нь вэб хөтчийн түүх шаардлагагүй тул бид тусдаа  <code>  чиглүүлэлт үүсгэх болно. js  </code>  файлыг манай сервер болон харилцагчийн нэвтрэх цэг хооронд хуваалцах болно.  </p>  <p>  Дараах  <code>  чиглүүлгүүдэд нэмэх хэрэгтэй. js  </code>  файл:  </p>  <pre>  <code class="jsx language-jsx"> // маршрут. jsимпорт дахин урвуулж, {хариу үйлдэл хийх}import {Route, IndexRoute, Link} 'react-router'// гол бүрэлдэхүүн хэсэганги Апп нь Бүрэлдэхүүн хэсэг {componentDidMount  <span class="f-c-white l-mr3">  {баримт бичиг. бие махбодь. className = ''}render  <span class="f-c-white l-mr3">  {буцах (<div><h1> Ерөнхий блогт хариу өгөх </ h1><nav><ul> <li>  <Link to = "/"> Эх хуудас </ Link>  </li>  <li>  <Link to = "/ about"> About </ Link>  </li>  <li>  <Link to = "/ work"> Ажлын </ Link>  </li>  <li>  <Link to = "/ contact"> Холбоо барих </ Link>  </li> </ ul></ nav>{энэ. тулгуур. Одоо програмаа ажиллуулаад үзье. Терминал дээр дараах тушаалуудыг ажиллуулна:  </p>  <pre>   <code class="bash language-bash">  mkdir олон нийтnpm суулгах хэрэгтэйnpm хөгжүүлэлтийг ажиллуулдаг </code>   </pre>  <p>  Дараа нь өөрийн хөтөч дээр http: // localhost: 8080 руу чиглүүлэхийн тулд үндсэн блогыг үйлдэл дээрээ үзээрэй.  </p>  <p>  Эдгээр зүйлсийг хийж дуусаад, үүнийг сервер дээр ажиллуулах цаг болжээ. Файл сервер  <code>  гэж нэрлэгдсэн файл үүсгэх. js  </code>  болон энэ агуулгыг нэмэх:  </p>  <pre>  <code class="jsx language-jsx"> // апп-сервер. jsимпортлох 'хариу үйлдэл'import {match, RoutingContext} нь 'react-router'import reactDOMServer 'react-dom / server'"илэрхийлэх"Импортоос 'hogan-express'// Чиглэлүүдимпортлох замууд '. / чиглүүлэлтүүд// Экспрессconst app = илэрхийлэх  <span class="f-c-white l-mr3"> апп. хөдөлгүүр ('html', hogan)апп. ('үзэл', __dirname + '/ үзэл')апп. ('/', илэрхийлэх статик (__ dirname + '/ public /'))апп. set ('port', (процесс. env PORT || 3000))апп. ('*', (req, res) => {match ({замууд, байршил: req url}, (алдаа, redirectLocation, renderProps) => {const reactMarkup = ReactDOMServer. renderToStaticMarkup (<RoutingContext {.renderProps} />)res. орон нутгийнхан. reactMarkup = reactMarkupХэрэв (алдаа) {res. status (500). илгээх (зурвас алдаа)} otherwise (redirectLocation) {res. redirect (302, redirectLocation. pathname + redirectLocation хайх)} else if (renderProps) {// Амжилтын!res. статус (200). render ('индекс .html')} else {res. status (404). render ('индекс .html')}})})апп. сонсох (app. get ('port'))консол. info ('==> Сервер нь процесс сонсож байна.) env. NODE_ENV +' горим ')консол. info ('==> Go to http: // localhost:% s', app get ('port')) </code>   </pre>  <p>   <code>  програм-сервер дээр. js  </code> , бид тохируулсан үндсэн замуудыг ачаалж байна. Эдгээр нь тэмдэглэгдсэн тэмдэгтийг тэмдэгт мөр болгон хувиргаж дараа нь бидний загварт хувьсагч байдлаар дамжуулж байна.  </p>  <p>  Манай серверийг эхлээд кодыг нь харахын тулд Semalt бэлэн байна, гэхдээ эхлээд скриптийг үүсгэе.  </p>  <p>  Нээлттэй  <code>  багцаа нээнэ үү. json  </code>  файлыг  <code>  скрипт  </code>  хэсгийг засахын тулд доорх шиг харагдана:  </p>  <pre>  <code class="jsx language-jsx"> // ."скриптүүд": {"start": "npm run production","үйлдвэрлэл": "rm -rf public / index html && NODE_ENV = production webpack -p && NODE_ENV = production babel-node app-server js --presets es2015","webpack-dev-server": "NODE_ENV = хөгжүүлэх PORT = 8080 webpack-dev-server - content-base public / --hot --inline --devtool inline-source-map - history-api-fallback","хөгжүүлэлт": "cp үзэлт / индекс. html public / index. html && NODE_ENV = хөгжүүлэх вэбpack && npm ажиллуулах вэбpack-dev-server"},// . </code>   </pre>  <p>  Бид өөрсдийн  <code>  үйлдвэрлэлийн  </code>  скриптийг үүсгэсэн болохоор бид өөрийн кодыг сервер талд болон үйлчлүүлэгч талд хоёуланг нь ажиллуулж чадна. Терминалаа ажиллуулахдаа:  </p>  <pre>   <code class="bash language-bash">  npm эхлэх </code>   </pre>  <p>  Өөрийн браузер дээр http: // localhost: 3000 гэсэн хаягтай. Та өөрийн энгийн блогын контентыг үзэж, ДЦГ-ын горимд байгаа хуудсуудыг хурдан, хялбараар удирдах боломжтой байх ёстой.  </p>  <p>  Урагш явж,  <code>  харах эх сурвалж  </code> . Бидний ТХГН-ийн код нь бүх роботуудыг олохын тулд энд байдаг. Бид дэлхийн аль алиных нь шилдэг нь болсон!  </p> <h2 id="conclusions"> Дүгнэлт  </h2>  <p>  Энэ эхний хэсэгт бид React-ын ертөнцөд ухаж эхэлж, бид үүнийг хэрхэн ашиглах боломжтойг харна уу. js, React Universal Blog App-г бүтээх.  </p>  <p>  Хэрэв та өөрийн блогыг дараагийн түвшинд аваачиж, контент нэмэх, засварлахыг мэдмээр байвал, "Баяр хүргэх Universal Blog App: Урсгалыг хэрэгжүүлэх" хоёр дахь хэсгийг уншаарай. Бид React Universal Blog App-ийг хялбархан царцаах бодит маханд орно. React organizational concepts and  <strong>  Flux pattern  </strong>  ашиглана.  </p>  <p>  <em> Бид та нарт хүргэхийн тулд Open SourceCraft-тэй хамтран ажиллаж байна  <strong>  6 Хөгжүүлэгчид хандах тухай Pro Tips  </strong> . Илүү нээлттэй эхийн агуулгад Open SourceCraft-ийг үзээрэй. js. Тэрээр мөн Cosmic JS-ийн үүсгэн байгуулагч, гүйцэтгэх захирал юм. Тэр чөлөөт цагаараа түүнийг тоглож, кино, телевизийн шоун дээр боогоод, эхнэр, нохойтойгоо хамт гэртээ өлгийджээ.  </div>  </div>  </div>  </div>  </span>  </span>  </span>  </span>  </span>  </p>  </pre>  </pre>  </code>  </html>  </head>  </meta>  </meta>  </meta>  </meta>  </meta>                                                                                 
March 1, 2018