ICSI301 Төсөл 4: ReactJS хуудас үүсгэх нь
Тохиргоо
Та өөрийн систем дээрээ Node.js болон npm модуль менежерийг суулгасан байх ёстой. Хэрэв үгүй бол, суулгах зааврыг дагаж одоо суулгаарай.
project4 нэрээр хавтас үүсгэж
энэ файлыг дотор нь задалж хуулаарай. Энэ zip файл энэ даалгаварт ашиглах
гарааны файлуудыг агуулж байгаа.
Энэ даалгаварт нэлээдгүй node модулиуд (жишээ нь, Webpack,
Babel,
ESLint) шаардлагатай. Эдгээр багаж
ReactJS веб апп босгох (build), мөн веб аппыг
веб хөтчид өгч үйчлэх энгийн Node.js веб сервер
(ExpressJS)
үүсгэхэд хэрэг болно. Эдгээр модулийг project4 хавтас дотроос дараах
командыг ажиллуулж суулгана:
npm installЭнэ команд ойролцоогоор 100 мегабайт хэмжээтэй 600 node модуль
node_modules гэсэн дэд хавтас дотор татаж авна.
Бид npm командыг янз бүрийн багажууд татаж авахад хэрэглэдэг.
package.json файлын "scripts" шинжид харагдаж байгаа шиг
дараах командуудыг ажиллуулах боломжтой:
npm run build- Webpack багажийгwebpack.config.jsфайлд байгаа тохиргоогоор ажиллуулж төсөлд байгаа бүх JSX файлуудыг багцалжcompiledхавтас дотор нэг ширхэг ЖаваСкрипт багц (bundle) файл үүсгэнэ.npm run build:w-npm run buildкомандтай адил, гэхдээ --watch горимоор Webpack багажийг ажиллуулна. Ингэснээр React компонентийг хянах, хэрэв тэдгээрийн аль нэгийг нь өөрчилбөл дахин шинэчилж үүсгэдэг. Энэ нь хөгжүүлэлтийн үед хэрэгтэй байдаг бөгөөд өөрчлөгдсөн компонентоор шинээр багц үүсгэж веб хөтчийг дахин ачаалдаг (refresh). Үгүй бол та өөрчлөлт бүрийн дарааnpm run buildкомандыг үргэлж дуудаж ажиллуулж байх шаардлагатай болно. Ямар нэг юм хуучирсан тухай санамж[DEP_WEBPACK_WATCH_WITHOUT_CALLBACK]гарч болзошгүй, үүнийг алгасахад аюулгүй.npm run lint- ESLint багажийг төслийн бүх ЖаваСкрипт файлд ажиллуулна. Даалгавраар илгээх таны код чинь ESLint програмыг ямар нэг санамжгүйгээр (warnings) давсан байх ёстой.
Бүх даалгаварыг гүйцэтгэсэн кодууд project4 хавтас дотор байх ёстой.
Энэ төсөлд веб аппыг хөгжүүлэхэд түгээмэл болсон ReactJS фрэймвөркийг ашиглана. Энэ төслийн зорилго бол таныг ReactJS-д хурдан суралцаж ICSI301 хичээлийн дараагийн төслүүдээр хийх веб аппыг хөгжүүлэхэд бэлэн болгох юм.
Бид веб аппдаа HTTP протоколоор хандахын тулд энгийн Node.js сервер ашиглана.
Үүнийг project4 хавтас дотроос дараах командаар асаана:
node webServer.js
project4 хавтас доторх бүх файлуудад http://localhost:3000
гэж эхлэх URL хаягаар хандана. http://localhost:3000 линк дээр давхарлагдахгүй
өөрийнхөө серверийг ажиллаж байгаа эсэхийг шалгаж болно. Энэ нь index.html файлыг таны веб хөтчид өгөх болно.
Та хөгжүүлэлтийн орчноо webpack багажийг watch горимоор тохируулахыг зөвлөж байна.
Энэ нь та node веб сервер (node webServer.js) болон webpack (npm run
build:w) програмыг төслөө босгох болон туршихдаа ашиглаарай.
Та тус тусад командын мөрөөр ажиллуулж болно. Ингэвэл Babel багажаар илрүүлсэн алдаа, түүний мэдэгдэл зэргийг
webpack програмын гаралтад харуулдаг учраас хэрэгтэй байх болно.
Хэрэв та MacOS зэрэг юникс-төст үйлдлийн системд ажиллаж байгаа бол команд нь:
node webServer.js & npm run build:wЭнэ нь нэг цонх дээр веб серверийг ард нь (background), webpack-ийг наана нь (foreground) харуулж ажиллуулдаг.
Виндоус үйлдлийн систем дээр веб серверийг ард нь, webpack-ийг наана нь ажиллуулахад Виндоусын хоёр команд нь:
start /B node webServer.jsАрд нь ажиллаж байгаа веб серверийг зогсоохын тулд дараах командыг ажиллуулна:
npm run build:w
taskkill /IM node.exe /F
Эхлэл
Энэ төслөөр таныг хичээлээр танилцсан model, view, controller (модель, харагдац, удирдлага) үлгэр загварыг ашиглах хэрэгтэй. Энэ загварын дагуу кодыг зохион байгуулах олон янзын арга бий. Бид нэгийг нь жишээ болгож ReactJS-ийн зарим үндсэн онцлог, мөн файл системд дэх байршлын зохиомж, модуль загвар зэргийг харуулж байна. Энэ үлгэр загварыг та дараагийн төслөөр хэрэгжүүлж яваарай.
Та энэ жишээг веб хөтөч дээрээ http://localhost:3000/getting-started.html URL хаягаар эхлүүлэн харж болно.
Энэ хуудас нь ReactJS-ийг бодитоор ажиллуулж буй жишээ юм. getting-started.html
хуудсанд байгаа HTML нь ReactJS аппыг зурж харуулахад зориулж нэг <div> элементийг
, аппын ЖаваСкрипт багцыг
compiled/gettingStarted.bundle.js холбож ажиллуулахад хэрэгтэй нэг script элементийг агуулж байгаа.
webpack тохиргооны файлд
webpack.config.js
gettingStarted.jsx ReactJS файлаас үүсэх багцыг чиглүүлэн зааж өгсөн болно. gettingStarted.jsx бол
нэг JSX програм бөгөөд ReactJS-ийн
Example нэртэй компонентийг getting-started.html дотор байгаа нөгөө <div> рендерлэж харагдана.
Дахин ашиглах компонентийг хөгжүүлэхэд ReactJS компонент болон түүнд холбоотой
CSS файлуудыг components дэд хавтас дотор зохион байгуулсан.
Жишээ нь, Example компонентийг components/example/{Example.jsx,Example.css} файлуудад хөгжүүлсэн.
getting-started.html хуудсыг дуудахад хэрэг болж байгаа файлуудыг (getting-started.html,
gettingStarted.jsx,
components/example/Example.jsx) үзээрэй. Эдгээр нь ReactJS веб аппыг ажиллуулахад шаардлагатай
ЖаваСкрипт болон JSX командуудыг тайлбар комментын хамт харуулж байгаа.
Та хичээлээр босгох бусад компонентоо хөгжүүлэхэд энэ үлгэр загварыг нэрийн зохицолтойгоор (naming conventions) хэрэглэх ёстой.
Моделийн өгөгдөлийг ихэвчлэн веб серверээс авдаг. Веб сервер нь өгөгдлийн сангаас авдаг.
Энэ төслөөр өгөгдлийн санг тохируулж хэрэглэхээс зайлсхийж дотоод файл системээс веб хөтчийн
DOM-д шууд өгөгдлийг ачаалах HTML script тагийг бэлдэж өгсөн байгаа.
Модел нь DOM-ийн ICSI301models нэртэй шинжид хадгалагдана.
ReactJS компонент дотроос window.ICSI301models гэж шууд чөлөөтэй хандах боломжтой.
Даалгавар 1: Example харагдацыг ойлгох ба шинэчлэх (5 оноо)
getting-started.html харагдац болон Example
компонентийг үзэж ойлгох хэрэгтэй. Өөрийгөө ойлгосон гэдгийг харуулахын тулд дараах зүйлсийг хийнэ:
- Example компонентийн модель өгөгдлийг "Unknown name" гэсний оронд өөрийн нэрээр шинэчлэнэ. "Unknown name" гэж хаана байгааг хайж болоод үүнийг солино.
-
Example компонентод байгаа
motto-updateгэсэн класстайdivэлементийн агуулгыг таны нэр болон богино (20 тэмдэгт хүртэл) уриа үг (motto) харуулдаг JSX командаар солино. Хэрэглэгчийн нэртэй адилхан уриа үгний утга нь моделийн өгөгдлөөс гарч ирэх ёстой. Үүнийг дэлгэцлэх зарим загварExample.cssфайлд бичээрэй. - Өмнөх алхамаар хийсэн дэлгэцлэх хэсгийг хэрэглэгч өөрөө уриа үгийг шинэчилж болдог байхаар өргөтгөнө. Гарааны утга нь моделийн өгөгдлөөс гарч ирдэг байх ёстой.
Даалгавар 2: Шинэ компонент үүсгэх - муж улсын харагдац (10 оноо)
Өгөгдсөн тэмдэгт мөрийг агуулж байгаа муж улсын бүх нэрсийг дэлгэцлэх шинэ компонент үүсгэнэ. Таны харагдац тэмдэгт мөр авдаг оролтын талбартай байх ёстой. Харагдац нь тухайн тэмдэгт мөрийг агуулж байгаа (том жижиг үсгийн ялгаагүй) муж улсын нэрсийг нэг жагсаалтад цагаан толгойн үсгийн дарааллаар дэлгэцлэнэ. Жишээ нь, тэмдэгт мөр нь "al" гэсэн утгатай байвал Alabama, Alaska, and California нэрс гарч ирнэ. Энэ хуудас муж улсын нэрсийг шүүхэд хэрэглэсэн тэмдэгт мөр утгыг бас дэлгэцлэдэг байна. Хэрэв тохирох муж улсын нэр олдохгүй бол веб хуудас нь холбогдох зурвасыг (юу ч харуулахгүй байхын оронд) харуулдаг байна. Тэмдэгт мөрийн утга хоосон бол бүх муж улсын нэрийг харуулдаг байна.
Даалгавар #1-д өгсөн шиг муж улсын нэрийг модель өгөгдөл болгож өгсөн байгаа. Үүнд
дараах script тагаар холбож өгсөний дараа window.ICSI301models.states гэж хандаж болно:
<script src="modelData/states.js"></script>
states.js файлаас муж улсын нэрний өгөгдлийн форматын тайлбартай танилцаарай.
Энэ даалгаврыг эхлүүлэхэд туслах, чиглүүлэх зорилгоор compiled/p2.bundle.js
файлыг холбож дуудсан p2.html файлыг нэрийн зохицолтойгоор бэлдэж өгсөн байгаа.
Энэ ЖаваСкрипт багц файлыг p2.jsx файлаас webpack багажаар үүсгэсэн бөгөөд
энэ нь States ReactJS компонентийг дэлгэцлэнэ. Энэ хуудсыг веб хөтөч дээр http://localhost:3000/p2.html URL хаягаар дуудаж үзээрэй.
Таны хөгжүүлэх файлууд бол:
components/states/States.jsx- Муж улсын компонентийг хөгжүүлэх ReactJS компонент.-
components/states/States.css- Компонентод шаардлагатай дурын CSS загварууд. Муж улсын нэрийн жагсаалтыг харуулахад зарим загваар хэрэгжүүлэх ёстой.
Даалгавар 3: Байршлыг өөрчлөх (5 оноо)
Header нэртэй ReactJS компонент үүсгэнэ. Энэ нь харагдацын дээд хэсэгт
веб аппын толгойг (header) дэлгэцлэдэг. Толгойг энэ даалгаварт байгаа
ReactJS-ийн бүх компонентод (gettingStarted.jsx,
p2.jsx,
p4.jsx, p5.jsx) нэмж өгнө.
Өмнөх даалгаврын эхний хэсгийг (таны нэр ба уриа үгтэй) өөрчлөхгүй. Тэр хэсэг нь толгойгоос тусдаа
байх ёстой. Өөрийн төсөөлөл, бүтээлч байдлаараа "зөвхөн чинийх" гэж харагдах толгойг үүсгээрэй. Энэ нь
нэмэлт зураг, график, юунд таалагдана, тэр бүгдийг агуулж болно. Та компонентууд дахь JSX/ЖаваСкриптийг өргөтгөх бөгөөд
гаднын ReactJS компонент, ЖаваСкрипт санг, жишээ нь, JQuery, ашиглаж болохгүй. Бүтээлч байгаарай!
Таны хөгжүүлэх файлууд бол:
components/header/Header.jsx- Толгойг хөгжүүлэх ReactJS компонент. Энэ нь React.Component төрлийн Header классаар тодорхойлогдоно.components/header/Header.css- Өөрийн компонентод хэрэгтэй ямар нэг CSS загварууд. Толгой компонентод заавал загвар тодорхойлж өгнө.
getting-started.html нь хуудасны дээд талдаа Даалгавар 3-аар хийсэн толгойг агуулж байх ёстой.
Даалгавар 1.2-оор хийсэн уриа үгтэй хэсэг нь үүний яг доор нь байна. Бусад хуудасны харагдацууд (p2.html,
p4.html and p5.html) энэ толгойг холбосон байна.
Даалгавар 4: Харагдацуудыг динамикаар солих (10 оноо)
p4.html болон холбогдох JSX файлыг
p4.jsx үүсгэнэ.
Энэ нь хоёр харагдац компонентийг (Example болон
States components) агуулна.
p4.jsx нь энэ хоёр компонентийг хооронд нь сольж харуулдаг байх хэрэгтэй.
Нэг харагдац нь дэлгэцлэгдсэн байхад нөгөөг нь сольж дэлгэцлэх нэг товч (button) байна.
Жишээ нь, States дэлгэцлэгдсэн байхад үүний дээд талд байрлах товч нь
"Switch to Example" гэж харагдах, States гэж дарахад өөрөө алга болоод Example
дэлгэцлэгддэг байна.
Энэ даалгаврын хувьд дээрх файлуудыг үүсгэх хэрэгтэй. Мөн webpack тохиргооны
webpack.config.js файлд p4.html хуудсанд ашиглах compiled/p4.bundle.js файлыг босгох тухай зааж өгөх хэрэгтэй болно.
Хэрэв webpack багажийг --watch горимоор (i.e. npm run build:w) ажиллуулж байгаа бол та
webpack.config.js файлаа өөрчилсний дараа дахин ажиллуулах шаардлагатай.
Даалгавар 5: Нэг хуудаст апп (5 оноо)
Хэдийгээр Даалгавар 4-т гүйцэтгэсэн аргаар харагдац хооронд шилжиж болох ч энэ нь тухайн нэг харагдацыг заах URL-ийг хуваалцах (share) болон тэмдэглэж авах (bookmark) боломжийг олгохгүй. Веб хөтчийг дахин ачаалахад веб апп ямар хуудсыг дэлгэцэлж байсныг алдуулна.
Бид энэ дутагдлыг URL-д харагдацын мэдээллийг хадгалснаар шийдвэрлэх боломжтой.
React Router нь ReactJS-д ийм функцээр хангаж өгдөг.
Энэ даалгаврын хувьд p4.html файлаа p5.html,
p4.jsx файлаа p5.jsx нэртэйгээр хуулбарлаж аваарай.
Кодоо React
Router модулийг ашиглан хоёр харагдацын хооронд нь сольж харуулдаг болгоно.
Та
тодорхой загвартай хэрэгслийн-мөр маягийн удирдлагатай (styled toolbar-like control) (энгийн бичвэр линк байх нь хангалтгүй) байх ёстой ба энэ нь хэрэглэгчид example болон states компонент харагдацыг сольж шилжих боломжийг олгодог байна.
Энэ бол бидний импортлож байгаа үндсэн ReactJS модулиас гаднах эхний өргөтгөл учир бид танд алхам нэг бүрийг нь тайлбарлаж өгье.
- Төслийн
package.jsonфайлд react-router модулийг тодорхойлсон учир npm install командаар аль хэдийнэ татаад авчихсан байгаа. Бид үүнийгp5.jsxфайл дотроо импортлож оруулах ёстой. Дараах мөрүүдийг нэмнэ:import { HashRouter, Route, Link } from "react-router-dom";Энэ мөр нь ЖаваСкрипт import командаар React Router-аас ReactJS компонентуудыг:HashRouter,Route, болонLinkавч ирнэ. React Router-ийнHashRouterмодуль URL-ийн ногдол хэсгийг (fragment portion) мэдээллийг хадгалах зорилгоор ашигладаг. Иймд бид States харагдацыг илэрхийлэхp5.html#/states, Example компонент харагдацыг тодорхойлохp5.html#/exampleтэмдгийг үүсгэж болно. -
React Router-ийг ашигладаг хамгийн түгээмэл арга нь одоогийн URL дээр нь түшиглээд
үзүүлэх гэж байгаа харагдацаа нөхцөлтэй рендерлэх юм.
RouteкомпонентийгHashRouterдотор оруулж ийм нөхцөлт рендерлэлтийг хэрэгжүүлж болдог:<HashRouter> ... <Route path="/states" component={States} /> <Route path="/example" component={Example} /> ... </HashRouter>Хэрэв URL-д#/statesагуулж байвал States,#/exampleгэж байвал Example компонентийг рендерлэнэ. -
Хэдийгээр бид хайперлинк (жишээ нь,
<a>tags) ашиглаад харагдацыг сольж болох боловч react-routerLinkкомпонентоор хайперлинк үүсгэн ашиглахыг зөвлөдөг. Жишээ нь:<Link to="/states">States</Link>
Дээрх кодhref="#/states"утгатай, "States" бичвэртэй хайперлинк үүсгэж өгнө.
Загвар (5 оноо)
Энэ оноог лекц дээр хэлэлцсэн MVC загварын зөвлөмжийг дагаж зөв зохион байгуулсан тохиолдолд өгнө. Таны код DOM-д шууд хандаж удирдсан байж болохгүй. Нэмж хэлэхэд, таны код болон загвар цэвэрхэн, уншууртай байх ёстой. Илгээхээсээ өмнө ESLint багажийг ажиллуулсан байх хэрэгтэй. ESLint ямар нэг алдаа өгөөгүй байна.
Хүлээлгэн өгөх үр дүн
5 дахь хэсгийг хэрэгжүүлсний дараа 1-ээс 4 хүртэл ажиллаж байгааг нягтлаарай!
Даалгавар илгээх
зааврын дагуу аппаа бүхэлд нь (project4
хавтас доторх бүгд) илгээнэ.