Функцэд параметр дамжуулах

React -д үйл явцыг хэрхэн боловсруулах талаар гүнзгийрүүлэн судлая. Үүний тулд Car компонентийн кодод Дарах нэртэй товчийг

import React from 'react'

const car = props => <div>
  <h3>Машиний нэр: {props.name}</h3>
  <p>Он: <strong>{props.year}</strong></p>
  <button>Дарах</button>
</div>

export default car

нэмэн өгөөд хуудсаа харвал

гэж харагдана.

Зөвлөмж: Хичээлийн материалыг бүрэн ойлгохын тулд React JS сан хичээлийн багцыг бүхэлд нь үзэхийг зөвлөе.

Car компонентод Дарах нэртэй товч нэмэгдсэн хэдий ч ямарч үйл явцыг мэдрэхгүй. Тэгвэл Car компонентийн Дарах товчийг дарахад App компонент h1 гарчигаар үзүүлж байгаа текстийг өөрчлөх ажиллагааг оруулан ирье. Car компонент App компонентоос дуудагдахын дээр солих гэж буй pageTitle талбар App компонентод state обьектод байгаа нь үндсэн асуудал. Эхлээд хүүхэд компонентод үйл явцын боловсруулагчийг /функц/ хэрхэн дамжуулахыг App компонентийн render аргын

  render() {
    console.log('Render')
    const divStyle = {
      textAlign: 'center'
    }

    const cars = this.state.cars

    return (
      <div style={divStyle}>
        <h1>
          {this.state.pageTitle}
        </h1>
        <button onClick={this.changeTitleHandler}>Гарчиг өөрчлөх</button>
        <Car
          name={cars[0].name}
          year={cars[0].year}
          onChangeTitle={this.changeTitleHandler}
        />
        <Car
          name={cars[1].name}
          year={cars[1].year}
        />
        <Car
          name={cars[2].name}
          year={cars[2].year}
        />
      </div>
    )

кодоос харцгаая. Ердийн html элементийн хувьд үйл явцын боловсруулагчийг тавин өгөхийг Гарчиг өөрчлөх товч дээр үзүүлсэн. Харин react компонентийн хувьд өгөгдлийн загвар нь html элементийнхээс өөр тул энэ арга ажиллахгүй. App компонентийн Гарчиг өөрчлөх товчны боловсруулагч changeTitleHandler функцийг Car компонентод параметрээр дамжуулахдаа түүнийг ердийн функц шиг л дамжуулдаг. Параметрийн нэрийг үйл явцын нэртэй зохицуулан ямраар ч өгөх боломжтой. Кодод товчны даралтаар хийгдэх ажиллагаатай холбон onChangeTitle нэрийг өгсөн. Параметрийн утгаар өмнөхтэй ижил changeTitleHandler функцийн холбоосыг өгнө. Одоо дамжуулсан параметрт Car компонентод

const car = props => <div>
  <h3>Машиний нэр: {props.name}</h3>
  <p>Он: <strong>{props.year}</strong></p>
  <button onClick={props.onChangeTitle}>Дарах</button>
</div>

гэж хандана. Хүүхэд компонентийн үйл явцын сонсогч тавих элементэд Jsx атрибутын нэрээ өгөөд props -оор дамжин функцийн холбоосыг агуулсан ирсэн параметрийг өгөхөд л хангалттай. Ингэснээр react тухайн холбоосоор App компонентийн changeTitleHandler функцийг ажиллуулах юм. Өөрчлөлтийг хадгалаад хуудсаа нээгээд Гарчиг өөрчлөх, эхний машиний Дарах товчууд дээр дарвал

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

  changeTitleHandler = (newTitle) => {
    this.setState({
      pageTitle: newTitle
    })
  }

гэхэд л болно. changeTitleHandler функц параметр аваад түүгээр pageTitle төлвийг өөрчилнө. changeTitleHandler функцэд параметрийг хэрхэн дамжуулах вэ? Үүнийг хэрэгжүүлэх хоёр аргыг App компонентийн render аргын

  render() {
    console.log('Render')
    const divStyle = {
      textAlign: 'center'
    }

    const cars = this.state.cars

    return (
      <div style={divStyle}>
        <h1>
          {this.state.pageTitle}
        </h1>
        <button onClick={this.changeTitleHandler.bind(this, 'App өөрчлөлт')}>Гарчиг өөрчлөх</button>
        <Car
          name={cars[0].name}
          year={cars[0].year}
          onChangeTitle={this.changeTitleHandler.bind(this, cars[0].name)}
        />
        <Car
          name={cars[1].name}
          year={cars[1].year}
          onChangeTitle={() => this.changeTitleHandler(cars[1].name)}
        />
        <Car
          name={cars[2].name}
          year={cars[2].year}
          onChangeTitle={() => this.changeTitleHandler(cars[2].name)}
        />
      </div>
    )
  }

кодоос харцгаая. Эхнийх нь javascript функцэд байдаг bind аргыг ашиглах. bind арга шинэ функц буцаахаас түүнийг дуудаггүй тул параметр дамжуулах сайн арга. bind арга эхний параметрээр ажлуулахгүйгээр буцаах функцийг /context -ээр/ авдаг. Кодод өгсөн this бол changeTitleHandler функцийг зааж байгаа хэрэг. Дараа нь аргаас буцаагдах функцэд дамжуулах параметрүүдийг өгдөг. Энд App өөрчлөлт текстийг өгсөн. Ингэснээр Гарчиг өөрчлөх товч дээр дарахад changeTitleHandler функцийг App өөрчлөлт параметртэй дуудах функцийн холбоос үүсэх юм. Энэ аргаар эхний машиний Дарах товчны үйл явцыг боловсруулагч функцэд машиний нэрийг параметрээр дамжуулсан. Сүүлийн хоёр машиний Дарах товчны үйл явцыг боловсруулагчийг bind аргаар биш функцийн холбоос байдлаар дамжуулсан. Параметрийн утгаар сумаар тодорхойлогдох функцийг зарлаад түүн дотроос changeTitleHandler функцэд машиний нэрийг параметрээр өгөн дуудахыг заасан. Өөрчлөлтийг хадгалаад хуудсаа нээгээд Гарчиг өөрчлөх болон машинуудын Дарах товчууд дээр дарвал үйл явцын боловсруулагчид хаанаас дарагдсанг илтгэх параметрүүд очих тул h1 гарчигаар үзүүлж байгаа текстээс үйл явц хаана бий болсонг мэдэх боломжтой болсон нь харагдана.
Боловсруулагч функцэд параметр дамжуулж байгаа хоёр аргын алийг ч ашиглах боломжтой ч bind арга хөтөчөөс бага нөөцийг ашигладаг тул арай зөв хэлбэр юм. Хоёрдахь аргын хувьд хуудас зурагдах бүрд функцийг дуудах шинэ функцийг үүсгэх болно. Програм жижигхэн байхад энэ нь нэг их нөлөөгүй ч аргыг олон хэрэглэвэл програмийн бүтээмжид айхтар биш ч нөлөөлөх талтай.

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

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

Javascript өгөгдлийн төрөлд нилээд чөлөөт байдлыг олгодог нь зарим тооцоололд хүндрэл, үл ойлгогдох байдлыг үүсгэх тал байдаг. Иймд программд өгөгдлийн төрлүүдийг автоматаар хөрвүүлэхдээ ямар дүрэмтэй байдгийг мэдэж байх нь чухал. Энэ хичээлээр өгөгдлийн төөрлийг хувиргар талаар авч үзэх болно.

Тоон дээр мөрийг нэмэх гэвэл яах вэ

Дараах кодыг авч үзье.

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

Энэ хичээлээс RxJs санг өгөгдөлтэй ажиллах ажиллагааг маш эвтэйхэн болгосон операторуудын талаар авч үзэж эхлэнэ. Өмнөх хичээлүүдэд бид төрөл бүрийн промис, массив, мөр, тоо, үйл явц гэх мэтийн өгөгдлүүдээс Observable /ажиглагч/ классын хувиудыг хэрхэн үүсгэхийг үзэцгээсэн. Энэ хичээлээс өмнөх хичээлүүдэд сурч авсан мэдлэгтээ суурилан RxJs санг ашиглан төрөл бүрийн өгөгдлүүдийг яаж удирдан, өөрчлөх операторуудтай танилцах болно. Энэ хичээлд map, pluck гэдэг хоёр сонирхолтой операторыг үзнэ.

  Нээгдсэн тоо: 1639 Бүртгүүлэх

VueJs -ийн хуудсанд үйл явц нэмэх ажиллагааны дараагийн боломж бол үйл явцын модификатор буюу тохируулагч юм. Орчуулга сайнгүй болсон байх талтай тул модификатор гэдгээр нь ойлговол зүгээр. Хичээлээр модификаторууд ямар хэрэгтэй, юу хийдэг талаар авч үзье. Жишээ нь E-surgalt сайтад шилжих холбоосыг агуулсан

    <body>
        <div id="app">
            <h2>
                <a href="https:" target="_blank">E-surgalt</a>
            </h2>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            ...
        </script>
    </body>

хуудас байлаа гэж бодъё. Хөтөч дээр хуудсыг нээгээд холбоос дээр дарвал E-surgalt сайтыг шинэ цонхонд нээнэ.

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

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

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

аваад үзье.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

KLM суурьтай, KL=1, KK1=d талтай KLL1K1 тэгш өнцөгт хажуу бүхий KLMK1L1M1 призм өгөгджээ. KL_|_KM, LMM1 , KMM1 хавтгайнуудын хоорондын өнцөг 60°, бол утганд призмд түүний бүх талыг шүргэх шаарыг багтааж болно.

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

 

тоонд хуваахад гарах тооны аравтын бичлэгт "0" цифр хэдэн удаа орох вэ?

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

 

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