Чиглүүлэгч /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 програмд олон хуудасыг хэрхэн үүсгэн удирдаж болохыг дараагийн хичээлээс судлана.

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

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

Тоог обьект хэлбэртэй болгоход ашиглагдана. Обьектын конструктор тоон обьектын анхны утга болох ердөө ганцхан параметр шаардана. Шаардлагатай бол Javascript обьектыг өөрөө үүсгэдэг тул Number обьектыг шууд утгаар үүсгээд байх нь ховор. Обьектын гол зориулалт бол шинжүүдийг нэг обьект болгох түүнчлэн Number(value) гэж дуудан утгыг тоо болгох юм.

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

ES6 -д бий болсон модулийн системийн дүрмийн талаар үзэхийн өмнө зарим бэлтгэл ажлыг хийх хэрэгтэй. Төслийн үндсэн хавтаст extra.js файлыг үүсгээд дараах кодыг

let name = 'e-surgalt.com';
let age = 6;

оруулан өгье. extra.js файлд зарлагдсан хоёр хувьсагчийг index.js файлд оруулан ирэх хэрэг гарлаа гэе. Энд хоёр нөхцлийг хангана. Нэгд бусад модулууд extra.js файлд зарлагдсан хувьсагчдыг өөртөө ашиглах боломжийг нээх зорилгоор түүнийг гадагш экспортлох ёстой. Хоёрт бусад модулаас эскпорт хийгдсэн зүйлийг ашиглах модул нь импортлох хэрэгтэй.

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

Хичээлээр хэрэглэгч сорилгын асуултын хариугаар сонгосон хувилбарын шалгалтын логикийн боловсруулалтыг хийе. Шалгалтыг Quiz компонентийн onAnswerClickHandler аргад

  const onAnswerClickHandler = (answerId) => {
    console.log("Хариултын Id:", answerId);
    if (quiz[activeQuestion].rightAnswerId === answerId) {
      const timeout = window.setTimeout(() => {
        if (isQuizFinished()) {
          console.log("Finished");
        } else {
          setActiveQuestion(activeQuestion + 1)      
        }
        window.clearTimeout(timeout);
      }, 1000);
    } else {
      
    }        
  };

  const isQuizFinished = () => {
    return activeQuestion === quiz.length - 1
  }

гэж хэрэгжүүлье. Дэлгэц дээрх асуулт бол quiz массивийн activeQuestion индекстэй элемент бөгөөд rightAnswerId талбарт зөв хариултын дугаар байгаа. Энэ утгыг onAnswerClickHandler функцэд параметрээр ирсэн answerId /хэрэглэгч сонгосон хариултын id/ -тэй тэнцэж буйг шалгана.

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

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

Энэ удаад Миксин /Mixin/ гэж юу болох, ямар хэрэгтэй, түүнийг хэрхэн ашиглахыг авч үзнэ. Үүний тулд Жагсаалтыг шүүх хичээлийн жишээнд өөрчлөлтийг хийн өргөжүүлье. Төслийн components хавтаст List.vue нэрээр

<template>
  <h1>List</h1>
</template>

<script>
export default {
 
}
</script>

кодтой компонентийг үүсгээд програмын эхлэлийн цэг main.js файлд компонентийг app-list нэрээр глобал байдлаар

import Vue from 'vue'
import App from './App.vue'
import List from './components/List.vue'

Vue.filter('uppercase', value => value.toUpperCase())

Vue.component('app-list', List)

new Vue({
  el: '#app',
  render: h => h(App),
})

бүртгүүлье.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

Хуваах нь нэг тоо нөгөө тоонд хэдэн удаа агуулагдаж буй тодорхойлох арифметикийн үйлдэл.
Хуваалтыг нэг бус удаа…

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

 

Зуучлагч (Mediator) нь олон тооны обьектууд бие биетэйгээ холбоос үүсгэхгүйгээр харилцан ажиллах боломжийг хангах загварчлалын хэв юм. Ингэснээр…

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

 

Делегатууд хичээлд ухагдхууны талаар дэлгэрэнгүй үзсэн ч жишээнүүд делегатийн хүчийг бүрэн харуулж чадахааргүй байсан.…

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

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

тэгшитгэлийг бод.

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

 

Долоон хүнийг 2 ба 5 хүнтэй хоёр багт хуваах нийт боломжийн тоог ол.

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

 

Гадаад шүргэлтээр байрласан R ба r радиустай хоёр тойрогт дотоод ерөнхий болон гадаад хоёр шүргэгчийг татжээ. Гадаад шүргэгчдийн хооронд үүсэх дотоод шүргэгч дээрх хэрчмийн уртыг ол.

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