Холбоосын параметрүүд

Манай төсөл олон хуудсуудтай болон тэдгээрийн хооронд динамикаар шилжилт хийж байгаа ч тухайн үед шилжилт хийгдсэн хуудаст тохирох цэс бусдаасаа ялгагдахгүй байгаа нь сайнгүй. 
Үнэхээр / чиглүүлэгч нүүр хуудас буюу http://localhost:3000/ хаягаар нүүр хуудасыг үзүүлж байхад

r_07_02_01

кодийн a тегээр тодорхойлогдсон Нүүр холбоост ямар нэгэн атрибут байхгүй байгаа нь харагдана. 

Тэгвэл react-router-dom сангаас NavLink компонентийг импортлоод

          <ul>
            <li>
              <NavLink to="/">Нүүр</NavLink>
            </li>
            <li>
              <NavLink to="/about">About</NavLink>
            </li>
            <li>
              <NavLink to="/cars">Cars</NavLink>
            </li>
          </ul>

цэсний тодорхойлолтын Link -ийг NavLink -ээр соливол

r_07_03_01

NavLink компонент сонгогдсон цэст active классийг динамикаар нэмнэ. Одоо active классаар сонгогдсон цэсийг хэвжүүлэх боломжтой болсон тул Layout компонентийн хэвжүүлэлтийн Layout.scss файлд 

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

    li {
      margin-right: 15px;

      a.active {
        font-weight: bold;
        color: red;
      }
    }
  }
}

active классийг тодорхойлон өгвөл сонгогдсон цэсний

r_07_03_02

фонт томрон улаан өнгөөр харагдана. NavLink компонент цэст нэмсэн active классаас өөр классийг идэвхитэй цэст нэмэх хэрэгтэй бол яах вэ? Layout.scss файлд тодорхойлсон a.active классийн нэрийг a.active-link болгон өөрчилбөл NavLink компонент цэст active классийг нэмэх ч active-link классийг олж харахгүй. active-link классийг цэсний тодорхойлолтод className атрибутаар

        <nav className="nav">
          <ul>
            <li>
              <NavLink to="/" className={({ isActive }) => (isActive ? "active-link" : "")}>
                Нүүр
              </NavLink>
            </li>
            <li>
              <NavLink to="/about" className={({ isActive }) => (isActive ? "active-link" : "")}>
                About
              </NavLink>
            </li>
            <li>
              <NavLink to="/cars" className={({ isActive }) => (isActive ? "active-link" : "")}>
                Cars
              </NavLink>
            </li>
          </ul>
        </nav>

оруулан ирнэ. className атрибут мөрөөс гадна функцийг авч болох бөгөөд функцэд автоматаар дамжуулдаг обьектоос холбоос идэвхитэй эсэхийг заадаг isActive түлхүүртэй талбар байдагийг бүтцийн задаргаагаар аван параметрээр дамжуулсан. Эргэн дуудалтын функцэд ирэх isActive талбарын утгаас хамааран холбоост active-link классийг нэмсэн. Өөрчлөлтийг хадгалаад хуудасны ажиллагааг шалгавал идэвхитэй цэсийг active-link классаар хэвжүүлнэ. Шалгаад үзээрэй. Кодод давталт гарч байгаа тул эргэн дуудалтын функцийг тусдаа setActive тогтмолд 

  render() {
    const setActive = ({ isActive }) => (isActive ? "active-link" : "");
    return (
      <div>
        <nav className="nav">
          <ul>
            <li>
              <NavLink to="/" className={setActive}>
                Нүүр
              </NavLink>
            </li>
            <li>
              <NavLink to="/about" className={setActive}>
                About
              </NavLink>
            </li>
            <li>
              <NavLink to="/cars" className={setActive}>
                Cars
              </NavLink>
            </li>
          </ul>
        </nav>
    ...

олгоод className атрибутуд setActive -ийг заан өгье. Олон ашиглагдах хэсгийг тусд нь гаргах энэ аргачлалыг тогтмол ашиглахыг зөвлөе. Өөрчлөлтийг хадгалаад хуудасны ажиллагааг шалгавал бүгд хэвийн ажиллана. Холбоост хэвжүүлэлтийн параметрийг style атрибутаар дамжуулан 

  render() {
    ...
    const setStyle = ({ isActive }) => ({color: isActive ? "green" : "black", });
    return (
      <div>
        <nav className="nav">
          <ul>
            <li>
              <NavLink to="/" style={setStyle}>
                Нүүр
              </NavLink>
            </li>
            <li>
              <NavLink to="/about" style={setStyle}>
                About
              </NavLink>
            </li>
            <li>
              <NavLink to="/cars" style={setStyle}>
                Cars
              </NavLink>
            </li>
          </ul>
        </nav>
    ...

хийсэн ч болдог. Өөрчлөлтийн дараа сонгодсон цэс ногоон өнгөтэй болон харагдана. 
Үүний зэрэгцээ NavLink компонентийн to параметрт тохиргоо хийж болно. Жишээ нь машинуудын жагсаалтыг үзүүлэх цэсний тодорхойлолтын 

...
            <li>
              <NavLink
                to={{ pathname: "/cars", search: "?a=1&b=2", hash: "hash" }}
                style={setStyle}
              >
                Cars
              </NavLink>
            </li>
...

to параметрт мөр биш обьектийг дамжуулъя. Обьектийн pathname талбарт чиглүүлэгчийн замыг, search талбарт замын араас get параметрээр нэмэгдэх мөрийг, hash талбарт ямар нэгэн хэш тэгийг өгсөн. Өөрчлөлтийг хадгалаад хуудсаа нээгээд cars цэсээр орвол

r_07_03_03

хаягийн мөр to параметрт дамжуулсан обьектын талбаруудыг агуулна.

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

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

Програмийг удирдах цэсийг нээх болон хаах ажиллагааг хариуцах компонентийг боловсруулъя. Үүний тулд төслийн components хавтаст Navigation хавтасыг үүсгээд түүн дотор цэсний шилжилтийн компонентийн MenuToggle хавтасыг үүсгээрэй. Компонентийн хавтаст

import React from "react";
import classes from "./MenuToggle.module.css";

const MenuToggle = (props) => {
  const cls = [classes.MenuToggle, "fa"];
  if (props.isOpen) {
    cls.push("fa-times");
    cls.push(classes.open);
  } else {
    cls.push("fa-bars");
  }

  return <i className={cls.join(" ")} onClick={props.onToggle} />;
};

export default MenuToggle;

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

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

import React from "react";
import styles from "./Car.module.css";

class Car extends React.Component {
  render() {
    const inputClasses = [styles.input];

    if (this.props.name !== "") {
      inputClasses.push(styles.green);
    } else {
      inputClasses.push(styles.red);
    }

    if (this.props.name.length > 5) {
      inputClasses.push(styles.bold);
    }

    return (
      <div className={styles.Car}>
        <h3>Машиний нэр: {this.props.name}</h3>
        <p>
          Он: <strong>{this.props.year}</strong>
        </p>
        <input
          type="text"
          onChange={this.props.onChangeName}
          value={this.props.name}
          className={inputClasses.join(" ")}
        />
        <button className={styles.btn} onClick={this.props.onDelete}>
          Устгах
        </button>
      </div>
    );
  }
}

export default Car;

өөрчилье.

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

Хичээлээр Vue -гийн обьект гэж юу болох түүний хувиудыг хэрхэн удирдах талаар авч үзье. Үүний тулд хуудаст h2 гарчиг түүнийг өөрчлөх товчийг агуулсан

    <body>
        <div id="app">
            <h2>{{ title }}</h2>
            <button @click="title = 'Гарчиг өөрчлөгдсөн'">Гарчиг өөрчлөх</button>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            new Vue({
                el: '#app',
                data: {
                    title: 'Vue -гийн хувь'
                }
            })
        </script>        
    </body>

энгийн кодыг харцгаая. Кодод app нэртэй id -тай div элементэд Vue -гийн нэг хувийг тодорхойлсон байгаа.

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

Javascript хэлийг ашиглахгүйгээр сайт зохионо гэдэг бүтэхгүй зүйл гэдэг нь ойлгомжтой. Сайтын хэрэглэгч талын хуудаст олон төрлийн javascript санг ашигладаг байсан бол одоо сайтыг бүгдийг javascript фреймворк ашиглан хийдэг SPA /single page application/ технологийг улам ихээр хэрэглэх болсон. Эдгээрийн нэг болох Vuejs сангийн хичээлүүдийг сайтад нийтэлж байгаа бөгөөд энэ удаад Vue -гийн хувийн тохиргооны обьектод data талбарт обьект тодорхойлж болж байхад яагаад компонентын хувийн тохиргооны обьектод data талбарт функц тодорхойлох ёстойг авч үзье. Компонентууд ямар хэрэгтэй вэ? хичээлийн жишээг

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

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

 

4 хүнийг нэг эгнээнд хичнээн янзаар жагсах боломжтой вэ?

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

 

тэгшитгэлийн хамгийн бага эерэг шийдийг ол.

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