Чиглүүлэгч /router/ төсөл үүсгэх

Энэ хичээлээс эхлэн олон хуудастай төслийг үүсгэн хуудас хооронд шууд буюу дахин ачаалалтгүйгээр шилжин удирдах боломжийн талаар үзэх болно. Өөрөөр хэлбэл SPA нэг хуудаст програмийг зохиож сурах юм. Хичээлд зориулан шинэ төслийг үүсгэхдээ react програм үүсгэх хичээлийнхээс арай өөрөөр шууд VSCode засварлагчаас үүсгэх аргыг ашиглая. Аргууд хооронд ялгаа бага тул онцын асуудал үүсэх учиргүй. Эхлээд төслүүдээ хадгалж буй хавтаст react-router хавтасыг үүгээд VSCode засварлагчаар үүсгэсэн хавтасаа нээн өгөөд терминалын цонхыг нээгээд

r_07_01

npx create-react-app . командыг өгөөрэй.

react програм үүсгэх хичээлд төслийг үүсгэхдээ терминалийг нээгээд төслүүдээ хадгалах хавтаст шилжээд npx create-react-app project_name командийг өгөхөд project_name хавтсыг үүсгээд түүнд төслийг үүсгэж байсан бол энэ удаад төслийн хавтасыг нээсэн учраас нэрийн оронд . /цэг/ өгснөөр төслийг тухайн хавтаст үүсгэхийг л зааж байгаа юм. Өөр ялгаа байхгүй. npx create-react-app команд сангийн хамгийн сүүлийн хувилбарыг суулгадаг гэдгийг сануулъя. Команд бидэнд

r_07_02

бүтэцтэй төслийг үүсгэнэ өгнө. Төслийн public хавтаст favicon.ico, index.html, manifest.json файлуудыг үлдээгээд index.html файлыг

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
    <title>React Router</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
  </body>
</html>

агуулгатай болгоорой. Файлаас тайлбаруудыг хассанаас өөрөөр онцын өөрчлөлт ороогүй. public хавтаснаас зарим файлуудыг хассан тул manifest.json файлыг

{
  "short_name": "React App",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    }
  ],
  "start_url": ".",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

болгон гэж өөрчилсөн. Төслийн src хавтаст

import "./App.scss";
import About from "./About/About";
import Cars from "./Cars/Cars";

function App() {
  return (
    <div>
    <nav className="nav">
      <ul>
        <li>
          <a href="/">Нүүр</a>
        </li>
        <li>
          <a href="/about">About</a>
        </li>
      </ul>
    </nav>

    <hr />
    <About />

    <Cars />
  </div>
  );
}

export default App;

кодтой App.js файл

.nav {
  ul {
    display: flex;
    justify-content: center;
    align-items: center;
    list-style: none;
    margin: 0;
    padding: 20px;

    li {
      margin-right: 15px;
    }
  }
}

кодтой App.scss файлаас гадна

import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

кодтой index.js

body {
  margin: 0;
  padding: 0;
  font-family: sans-serif;
}

кодтой index.css файлуудыг үлдээгээд бусдыг устгая. Үүний дээр src хавтаст About, Cars нэртэй хоёр хавтас үүсгээд About хавтаст

import React from "react";
import "./About.scss";

const About = (props) => (
  <div className="About">
    <h1>About хуудас</h1>
  </div>
);

export default About;

кодтой About.js

.About {
  padding: 20px;
  display: block;
  border: 1px solid #ccc;
  text-align: center;
}

кодтой About.scss файлыг үүсгэсэн. Өөрөөр хэлбэл төсөлд About компонентийг үүсгэнэ гэсэн үг. Компонентийн кодод тайлбар хэрэггүй гэж бодлоо. Cars хавтаст

import React, {Component} from 'react'
import Car from './Car/Car'

export default class Cars extends Component {
  state = {
    cars: [
      {name: 'Ford', year: 2018},
      {name: 'Audi', year: 2016},
      {name: 'Mazda', year: 2010}
    ]
  }

  render() {
    return (
      <div style={{
        width: 400,
        margin: 'auto',
        paddingTop: '20px'
      }}>
        {this.state.cars.map((car, index) => {
          return (
            <Car
              key={index}
              name={car.name}
              year={car.year}
            />
          )
        })}
      </div>
    )
  }
}

кодтой Cars.js файлыг үүсгээрэй. Энэ бол машинуудийн мэдээллийг үзүүлэх Cars компонентийн код. Компонентийг export default class Cars ... гэж шууд экспортолж бас болно. Cars компонентоос дуудагдах Car компонентийг Cars хавтаст Car хавтас үүсгээд түүнд

import React from "react";
import "./Car.scss";

const Car = (props) => {
  return (
    <div className={"Car"}>
      <h3>Машины нэр: {props.name}</h3>
      <p>
        Он: <strong>{props.year}</strong>
      </p>
    </div>
  );
};

export default Car;

кодтой Car.js

.Car {
    margin-bottom: 10px;
    display: block;
    padding: 10px;
    border-radius: 5px;
    transition: border, box-shadow .3s;
    border: 1px solid #ccc;
    box-shadow: 0 4px 5px 0 rgba(0, 0, 0, .14);
}

.Car:hover {
    border: 1px solid #aaa;
    box-shadow: 0 4px 15px 0 rgba(0, 0, 0, .25);
    cursor: pointer;
}

кодтой Car.scss файлуудыг үүсгээрэй. Компонентуудийн кодийг та одоо ойлгодог болсон гэж бодож байна.
Шинэ төсөлд sass препроцессор ашиглан хэвжүүлэлтийн css -ийг үүсгэх scss өргөтгөлтэй файлуудыг боловсруулахын тулд код засварлагчийн терминалаас

npm i sass --save-dev

командыг өгөн шинэ пакетийг суулгаарай. sass препроцессорийн талаар интернетээс судлахыг зөвлөе. Төслийн файлуудыг үүсгэн, засварлаад терминалаас

npm start

командийг өгөн төслийн компиляцийг хийвэл хөтөчид

r_07_03

хуудас нээгэдэнэ.

Санамж: Өмнөх хичээлүүдэд төсөл, компонент үүсгэх дадлагыг нилээд хийсэн тул кодуудад тайлбарыг оруулаагүй бөгөөд та дээрх үр дүнд өөрөө хүрэхийг оролдоорой. Кодийг бүгдийг гараараа шивэн алдаа гарвал интернетээс судлан заавал үр дүнд хүрэхийг хичээгээрэй. react -ийн зохиогчид функционал компонентийг ашиглахыг илүү гэж зөвлөдөг тул Component -оос удамшуулан хэрэгжүүлсэн Cars компонентийг та функционал хэлбэрийн компонент болгон өөрчлөн бичээрэй.

Шинэ төслөө үүсгэсэн тул react програмд олон хуудасыг хэрхэн үүсгэн удирдаж болохыг дараагийн хичээлээс судлана.

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

  Нээгдсэн тоо: 894 Төлбөртэй

RxJs санг ашиглах хичээлд бид стримийг өөрсдөө үүсгэсэн бол энэ хичээлд Javascript -ийн бэлэн обьектоос буюу үйл явцаас стримийг /урсгал/ хэрхэн үүсгэх талаар үзье. Үүний тулд index.html файлд товчийг

...
<body>
    <button>Дарах</button>
<script src="node_modules/rxjs/bundles/rxjs.umd.min.js"></script>
<script src="index.js"></script>
</body>
...

үүсгэн өгөөд товч дээр дарах үйл явцаас стрим үүсгэхийн тулд index.js файлд

var button = document.querySelector('button');
var btn$ = Rx.Observable.fromEvent(button, 'click');

кодыг оруулан өгье.

  Нээгдсэн тоо: 435 Төлбөртэй

Өмнөх хичээлүүдэд React сан хэрхэн ажилладаг, create react app хэрэгсэл, хуудасны хэвийн бичлэгийн Jsx дүрмүүдтэй танилцан тэдгээрийн ажиллагааг жишээнд дээр судлан танилцсан бол одоо сангийн өөрийнх нь ажиллагаануудтай дэлгэрэнгүй танилцгаая. Эхлээд create react app хэрэгслээр үүсгэсэн төслийн үндсэн компонент болох App -аас өмнөх хичээлд судалсан зарим ойлголтуудын жишээ кодийг

class App extends Component {
  render() {
    const divStyle = {
      textAlign: 'center'
    }
    return (
      <div style={divStyle}>
        <h1>
          Hello world!
        </h1>
        <Car name={'Toyata Prius'} year={'2018'} />
        <Car name="Toyata Camry" year={'2019'} />
        <Car name={'Ford'} year={'2015'} />
      </div>
    )
  }
}

хасан цэвэрлэе.

  Нээгдсэн тоо: 223 Нийтийн

Хичээлээр Үр дүнгийн компонент хичээлээр хийсэн компонентод динамик ажиллагааг хэрэгжүүлве. Өөрөөр хэлбэл сорилгын үр дүнг динамикаар үзүүлэх юм. Үүний тулд Quiz компонентод

const [results, setResults] = useState({})

сорилгын үр дүнгийн results төлвийг нэмэн өгье. results обьект үр дүнг {[асуултын_id]: хариултын_төлөв} хэлбэрээр агуулна. Өөрөөр хэлбэл хариултын төлөв талбарт хариулт зөв бол right буруу бол wrong утгыг агуулах юм.

  Нээгдсэн тоо: 378 Төлбөртэй

Хичээлээр компонент ирж буй параметрүүдэд шалгалт хийх боломжийн авч үзье. Төслийн App компонентоос Car компонентийг дуудаж буй кодийг

    ...
            <Car
              name={car.name}
              year={car.year}
              onDelete={this.deleteHandler.bind(this, index)}
              onChangeName={(event) => this.onChangeName(event.target.value, index)}
            />
    ...

аваад үзье.

Үйл явдал /event/ тодорхой үйлдэл хийгдсэн талаар системд мэдэгддэг. Хэрвээ бид энэхүү үйлдлийг ажиглах хэрэгтэй бол яг энд…

Нээгдсэн тоо : 128

 

Манай төсөл олон хуудсуудтай болон тэдгээрийн хооронд динамикаар шилжилт хийж байгаа ч тухайн үед шилжилт хийгдсэн хуудаст тохирох…

Нээгдсэн тоо : 190

 

Зочин (Visitor) паттерн классуудыг өөрчлөхгүйгээр тэдгээрийн обьектуудын үйлдлийг тодорхойлох боломжийг олгоно. Зочин хэвийг ашиглахдаа классуудын хоёр ангилалыг тодорхойлно.…

Нээгдсэн тоо : 158

 

Лямбда-илэрхийлэл нь нэргүй аргын хураангуй бичилтийг илэрхийлнэ. Лямбда-илэрхийлэл утга буцаадаг, буцаасан утгыг өөр аргын…

Нээгдсэн тоо : 284

 

Кодийн сайжруулалт /рефакторинг/ хичээлээр програмийн кодоо react -ийн зарчимд нийцүүлэн компонентод салгасан.…

Нээгдсэн тоо : 313

 

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

Нээгдсэн тоо : 320

 

Делегаттай нэргүй арга нягт холбоотой. Нэргүй аргуудыг делегатийн хувийг үүсгэхэд ашигладаг.
Нэргүй аргуудын тодорхойлолт delegate түлхүүр үгээр…

Нээгдсэн тоо : 385

 

Математикт харилцан урвуу тоонууд гэж бий. Ямар нэгэн тооны урвуу тоог олохдоо тухайн тоог сөрөг нэг зэрэг дэвшүүлээд…

Нээгдсэн тоо : 386

 

Төсөлд react-router-dom санг оруулан чиглүүлэгчдийг бүртгүүлэн тохируулсан Санг суулган тохируулах хичээлээр бид хуудас…

Нээгдсэн тоо : 461

 
Энэ долоо хоногт

Нээгдсэн тоо : 746

 

Аяга, стакан, ваар, лаазанд сүү, ундаа, квас, ус байжээ. Аяганд ус, сүү байхгүй, ундаатай сав ваар болон квастай савны дунд, лаазанд ундаа, усны аль нь ч байхгүй, стакан лааз ба сүүтэй савтай зэрэгцэн байрласан бол ямар саванд ямар шингэнийг хийсэн бэ.

Жич: Маш сонирхолтой гоё бодлого. Оролдоод үзээрэй.

Нээгдсэн тоо : 1074

 

илэрхийллийн хялбарчил.

Нээгдсэн тоо : 325