Транформац /өөрчлөлт/ хийх операторууд

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

Map оператор

Операторыг ойлгохын тулд Observable /ажиглагч/ классын interval аргаар стрим үүсгээд

Rx.Observable.interval(1000)
    .subscribe(createSubscribe('map'));

түүнд бүртгүүлээд хуудсаа нээвэл

консолд 1 секундын завсартайгаар тоон дарааллуудыг үзүүлнэ. interval аргаар стрим үүсгэхийг бид мэдэх бөгөөд бас take аргаар стримээс тараах мэдээллийг хязгаарлаж болохыг ч бас үзсэн тул кодыг

Rx.Observable.interval(1000)
    .take(5)
    .subscribe(createSubscribe('map'));

болгон өөрчилье. Одоо консолд 1 секундын завсартайгаар 5 элемент бүхий тоон дарааллыг үзүүлээд стрим дуусна. map операторыг авч үзье. Кодод ямарч функцийг цэг тавиад гинж байдлаар бичиж байгаа ба map операторыг ч бас

Rx.Observable.interval(1000)
    .map(x => {
        return x * 2;
    })
    .take(5)
    .subscribe(createSubscribe('map'));

цэг тавин бичин өгнө. map оператор стримээс тухайн үед тарааж буй утгыг авдаг. Бичлэгт байгаа x бол тухайн үед interval аргаас өгч буй утга юм. Оператор x -р дамжуулан стримийн тухайн үеийн утгыг авсан болохоор түүнд ямар нэгэн үйлдлийг хийх боломжтой. Жишээнд параметр буюу стримийн утгыг 2 -оор үржүүлсэн. map оператороос ямар нэгэн утгыг заавал буцаах ёстой тул кодод үржүүлсэн утгаа буцаахаар бичсэн. Хуудсаа шинэчилбэл

консолд элемент бүр нь 2 -оор үржигдсэн дарааллыг авна. Бид take аргаар interval аргаас үүсгэх дарааллын хэмжээг хязгаарлан өгсөнг анхаарна уу. Ерөнхийдөө үүнд л map операторын утга оршино. Өөрөөр хэлбэл оператороор стримээс тарааж буй утгуудыг удирдан өөрчлөх боломжийг олгоно. ES6 -гийн бичлэгийн дүрмийг ашиглан дээрх кодыг

Rx.Observable.interval(1000)
    .map(x => x * x)
    .take(5)
    .subscribe(createSubscribe('map'));

гэж хураангуйлж болно. Энд бид утгыг 2 -оор үржүүлэлгүй түүний квадратыг буцаахаар өөрчилсөн. Хуудсаа шинэчилбэл

үр дүнг өгнө. Одоо map операторыг ашиглах өөр хувилбаруудыг харцгаая.

of аргыг ашиглах

map оператор Observable /ажиглагч/ классын аргуудаар үүсгэсэн өгөгдлүүдийг удирдах боломж олгодог учраас кодыг

Rx.Observable.of('hello', 'world', 'e-surgalt')
    .map(x => x.toUpperCase())
    .subscribe(createSubscribe('map'));

гэж өөрчилье. Бид interval аргын оронд of аргыг өгөөд түүнд мөрүүдийг дамжуулсан. Аргаас тараах өгөгдлүүдэд хязгаарлалт хэрэггүй учраас take аргыг хассан. of арга өгөгдөл тараах бүрд map арга түүнийг том үсэгт шилжүүлэхийг toUpperCase аргаар хэрэгжүүлсэн. Хөтөч дээр хуудсаа нээн харвал консолд

гэж үзүүлнэ.

Обьектын өгөгдлүүдийг удирдах

Обьектуудтай ажиллахын тулд эхлээд index.html файлаа нээгээд  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<input type="text">

<script src="node_modules/rxjs/bundles/Rx.min.js"></script>
<script src="index.js"></script>
</body>
</html>

input элементийг нэмэн өгөөд түүний үйл явцаас Observable /ажиглагч/ -ийг үүсгэе. Өөрөөр хэлбэл input элементэд өгөгдөл оруулахаар товч дарах үйл явц бүрд боловсруулалтыг хийнэ гэсэн үг. Иймээс index.js файлын кодод

Rx.Observable.fromEvent(document.querySelector('input'), 'keyup')
    .subscribe(createSubscribe('map'));

Observable классын үйл явцаас стрим үүсгэх fromEvent аргыг дуудая. fromEvent арга эхний параметрээр үйл явцыг нь сонсох хэрэгтэй элементийг харин хоёрдахь параметрээр үйл явцын нэрийг мөр хэлбэрээр авдаг гэдгийг өмнө нь үзсэн. Одоохондоо map аргыг ашиглахгүйгээр index.html файлаа нээгээд input элементэд тэмдэгт оруулбал консолд

ердийн Javascript обьектыг үзүүлнэ. Обьектын input элементэд хамааралтай target талбарын value талбарт

бидний оруулан өгсөн тэмдэгтийн утга хадгалагдаж байгаа. createSubscribe аргад элементийн target , value талбарт хандаж болох хэдий ч map аргыг ашиглан тухайн үед элементэд оруулсан өгөгдөлд шууд хандан ажиллаж болдог тул index.js файлын кодыг

Rx.Observable.fromEvent(document.querySelector('input'), 'keyup')
    .map(x => x.target.value)
    .subscribe(createSubscribe('map'));

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

дээрх үр дүнг авна. Үүнээс гадна map аргыг

Rx.Observable.fromEvent(document.querySelector('input'), 'keyup')
    .map(x => x.target.value)
    .map(x => x.toUpperCase())
    .subscribe(createSubscribe('map'));

гэж дараалуулан ашиглаж болно. Эхний арга элементийн тухайн үеийн утгыг авах бол дараагийн арга утгыг том үсэгт шилжүүлнэ. Хуудсаа шинэчлээд элементэд өгөгдөл оруулбал

дээрх үр дүнг авна. Эндээс Observable /ажиглагч/ -ээс тараан буй өгөгдлүүдийг map аргыг ашиглан өөрийн хүссэнээр удирдах боломжой нь харагдана. Үүнээс гадна map аргаар өөрсдийн обьектыг ч үүсгэх боломжтой. Жишээ нь input элементийн утгыг том үсэгт шилжүүлэхийн зэрэгцээ түүний уртыг авах хэрэгтэй боллоо гэвэл кодод дахин нэг map аргыг

Rx.Observable.fromEvent(document.querySelector('input'), 'keyup')
    .map(x => x.target.value)
    .map(x => x.toUpperCase())
    .map(x => {
        return {
            value: x,
            length: x.length
        };
    })
    .subscribe(createSubscribe('map'));

нэмэн өгөөд хуудсаа шинэчлээд input элементэд утга оруулбал

элементэд тухайн үед байгаа утга болон түүний уртыг агуулсан обьектыг хүлээн авна. Цааш обьекттой өөрийн хүссэнээр ажиллах боломжтой. map аргаар Observable /ажиглагч/ -ээс тараан буй өгөгдлүүдээс обьектыг дээрх байдлаар үүсгэж болно. Энд анхааруулах нэг зүйл map аргад буцаах утга байх ёстой.

pluck арга.

pluck болон map аргуудын ажиллагаа төстэй боловч pluck арга обьектоос тодорхой түлхүүрээр утгыг авдаг. Өмнөх жишээнд map аргаар элементийн үйл явцаас target.value талбарын утгыг .map(x => x.target.value) гэж авч байсныг pluck аргаар

Rx.Observable.fromEvent(document.querySelector('input'), 'keyup')
    .pluck('target', 'value')
    .map(x => x.toUpperCase())
    .map(x => {
        return {
            value: x,
            length: x.length
        };
    })
    .subscribe(createSubscribe('map'));

гэж авч болно. map аргад тухайн үеийн обьектын талбаруудыг target.value гэж заан өгч байсан бол pluck аргад талбаруудын нэрийг түлхүүр хэлбэрээр мөр байдлаар заан өгдөг. Хуудсаа шинэчлээд input элементэд өгөгдөл оруулбал

өмнөхтэй яг ижилхэн үр дүнг авна. Өөрөөр хэлбэл pluck арга бол map аргын хураангуйлсан хувилбар юм.

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

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

EcmaScript 6 -гийн зарим обьектуудад шинээр бий болсон аргуудын талаар хичээлд авч үзье.

Обьектыг өргөжүүлэх

Обьектын өргөжүүлэлтийг хийх аргыг

let obj1 = {a: 1};
let obj2 = {b: 2, c: 3};

обьектууд дээр авч үзье. obj1 -ийг obj2 -оор өргөжүүлье гэвэл ES6 -д бий болсон assign аргыг

Object.assign(obj1,obj2);

ашигладаг. Аргад эхний параметрээр өргөжих /target/ обьектыг харин хоёрдахь параметрээр өргөжүүлэх /source/ обьектыг өгнө. Дээрх командын дараа

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

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 сан хичээлийн багцыг бүхэлд нь үзэхийг зөвлөе.

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

react компонентийн амьдалын суурь циклүүдийн сүүлийнх нь componentWillUnmount юм. Аргыг Car компонентод

   componentWillUnmount() {
    console.log('Car componentWillUnmount')
  }

нэмэн тодорхойльё. Арга хэзээ дуудагдахыг нэрнээс нь ойлгосон гэж бодож байна. componentWillUnmount арга компонентыг устган түүнийг DOM -оос хасах үед дуудагдана. Аргын ажиллагааг харахын тулд хөтөч дээр хуудсаа нээгээд машиний жагсаалтыг

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

React компонентод параметр дамжуулах бас нэгэн аргыг авч үзье. Компонентийн хэвд jsx гэж нэрлэгддэг html маягийн бичлэгийг ашиглаж байгаа. App компонентод Car компонентийг оруулан ирэхдээ

<Car name={'Toyata Prius'} year={'2018'} />

гэж компонентийн нэрийг өөрөө хаагдсан (/> -ийг ашиглана) html тег хэлбэрээр бичин өгч байгаа.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

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

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

 

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

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

 

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