Getters -ийг ашиглах

Төслийн нэгдсэн хадгалагчид програмын төлвүүдийг state -д үүсгэн ашиглахыг сурсан тул vuex -ийн дараагийн боломжийг судалцгаая. Одоогоор төслийн Actions компонентод байрлах товчнууд дээр дарах үйл явцын боловсруулагч state -д тодорхойлогдсон counter талбарын утгыг өөрчилнө. Харин Counter компонент state -ээс counter талбарыг аван темлейтдээ үзүүлж байгаа. Төсөлд бас нэгэн компонентийг нэмээд түүн дээр vuex -ийн дараагийн боломжийг судлая. Үүний тулд төслийн components хавтаст Counter компоненттой ижилхэн

<template>
  <h2>Тоолуур 2: {{counter}}</h2>
</template>

<script>
export default {
  computed: {
    counter() {
      return this.$store.state.counter
    }
  }
}
</script>

кодтой SecondCounter.vue файлыг үүсгэе.

Компонентуудыг ялгахын тулд Тоолуур 1: , Тоолуур 2: гэсэн текстийг үзүүлэхээр болгоё. Дараа нь шинээр үүсгэсэн компонентийг App компонентод

<template>
  <div class="container text-center pt-5">
    <app-counter></app-counter>
    <app-second-counter></app-second-counter>
    <hr>
    <app-actions></app-actions>
  </div>
</template>

<script>
import Counter from '@/components/Counter.vue'
import Actions from '@/components/Actions.vue'
import SecondCounter from '@/components/SecondCounter.vue'

export default {
  components: {
    appCounter: Counter,
    appActions: Actions,
    appSecondCounter: SecondCounter
  }
}
</script>

импортлон аваад компонентийн хэвд харуулна. Өөрчлөлтийг хадгалаад төслийг хөтөч дээр нээвэл

vue10_03_01

гэж харагдана. Тоолуурыг нэмэх, хасах товчнуудыг дарвал програмын логикийн дагуу

vue10_03_02

тоолууруудын утга зэрэг өөрчлөгдөнө. Програмын хэвд тоолуурын утгыг харуулах биш түүнээс хамаарсан тооцооллыг утгыг харуулах хэрэгтэй боллоо гэж үзье. Жишээ нь

return this.$store.state.counter  * (10 - 1 + 3) * 5

үйлдэл хийх хэрэгтэй болсон гэе. Дээрх үйлдлийг Counter , SecondCounter компонентуудын counter тооцооглогдох шинжээс буцаах утгуудад тавиад програмын ажиллагааг шалгавал

vue10_03_03

програм хэвийн ажилах ч асуудал үлдсэн. Учир нь төслийн Counter , SecondCounter компонентуудад кодын давхардал бий болсон. Хэрвээ store нэгдсэн хадгалагчид энэ үйлдлийг хийгээд үүний дараа компонентуудад өгдөг байвал компонентууд програмын логик ажиллагаанд оролцохгүйн дээр кодын давхцал байхгүй болохоор. Яг ийм зорилгод тохирох getter гэж нэрлэдэг механизм store нэгдсэн хадгалагчид байдаг. getter -ийг store нэгдсэн хадгалагчид

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    counter: 10
  },
  getters: {
    computedCounter(state) {
      return state.counter * (10 - 1 + 3) * 5
    }
  }
})

гэж тодорхойлно. Vuex.Store -д дамжуулах тохиргооны обьектод state талбараас гадна getters талбарыг тодорхойлон өгч болно. getters функцуудын обьектоор тодорхойлогдоно. Дээрх өөрчлөлтөөр getterscomputedCounter функцийг тодорхойлон өгсөн. getters -ийн функцууд компонентоос хандан авч болох ямар нэгэн өгөгдлийг буцаах ёстой. Эндээс getters -т зарлагдсан функцуудэд state -д тодорхойлогдсон шинжүүдэд ямар нэгэн үйлдлийг хийгээд үүний дараа үр дүнг компонентод өгөх боломж гарч ирнэ. Энэ бол манай зорилго. Функц state -д үйлдэл хийх тул түүнийг оролтын параметрээр авна. Ингэснээр getters -ийн функцууд state -ийн дурын талбарт хандах боломжтой болох тул бид компонентуудад хийгдэж байсан үйлдлийг computedCounter функцэд хийгээд буцаана. Одоо Counter , SecondCounter компонентууд state -ийн counter талбарт хандан тооцоолол хийхгүйгээр getters -ийн computedCounter

...
<script>
export default {
  computed: {
    counter() {
      return this.$store.getters.computedCounter
    }
  }
}
</script>

this.$store.getters.computedCounter гэж хандахад болно. Энд тооцоологдох шинжийн зарчимтай төстэй жижигхэн онцлог байгааг харсан байх. getters -т тодорхойлогдсон computedCounter нь функц боловч кодоос түүнд функц байдлаар биш ердийн шинж хэлбэрээр хандана. Өөрөөр хэлбэл computedCounter() гэж биш зүгээр л нэрээр нь computedCounter ханддаг. Харин Vuex үүнийг ойлгон computedCounter функцийг ажлуулан түүнээс буцаах утгыг өгнө. Кодын өөрчлөлтийг Counter , SecondCounter компонентуудад хийгээд төслийн компиляцийг хийгээд хөтөч дээр нээгээд

vue10_03_04

товчнууд дээр дарахад тоолууруудын утгуудад computedCounter тооцоолол хийн програм хэвийн ажиллана. Жишээ нь тоолуурын анхдагч утга, түүнд хийгдэх тооцооллын алгоритм

export default new Vuex.Store({
  state: {
    counter: 1
  },
  getters: {
    computedCounter(state) {
      return state.counter * 5
    }
  }
})

өөр боллоо гэхэд бид компонентуудын кодод хүрэхгүйгээр зөвхөн Vuex.Store тохиргооны обьектын тодорхойлолтыг засахад л хангалттай. Өөрчлөлтийг хадгалаад хуудсаа нээвэл програм

vue10_03_05

өөрчлөлтийн дагуу хэвийн ажиллана. Vuex -ийн getters механизм програмын логикоос компонентуудыг чөлөөлөн кодын давхцалгүй болгож байгаа энэхүү давуу талыг ашиглахыг сайн аргачлал гэж үздэг тул сайтар ойлгон програмдаа ашиглаж байхыг зөвлөе.

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

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

Javascript дээр бичигдсэн RxJs сан нь програмчлалыг рейктив /reactive/ аргачлалаар боловсруулахад зориулагдсан. RxJs санг ашиглан массив, мөрүүд, тоонууд, промис /promise/, үйл явцууд /event/ гэх мэтийн өгөгдлийн төрлүүдээс гадна дурын синхрон зүйлүүдтэй амархан харьцан ажиллах боломжтой. Стримүүдийг нэгтгэх I хичээлд RxJs санг ашиглан өөр стримүүдийг нэг стримд нэгтгэх аргуудтай танилцаж ба энэ хичээлээр аргуудыг үргэлжлүүлэн авч үзнэ.

concatMap арга

Арга mergeMap аргатай тун адилхан. Аргыг ажиллагааг

Rx.Observable.range(1, 5)
    .concatMap((x, i) => {
        return Rx.Observable.interval(100)
            .take(x)
            .map(c => i)
    })
    .subscribe(createSubscribe('concatMap'));

кодоос харцгаая.

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

Програм ямар нэгэн алдаагүй зөв ажиллаж байх хэрэгтэйг бүгд мэднэ. Харин програм зохиогч өөрийн кодийг хурдтай ажилладаг, зохион байгуулалт сайтай, ойлгомжтой байлгахыг байнга эрмэлзэх ёстой. Програм зохиогч бүр програм боловсруулалтын DRY /do not repeat yourself/ дүрмийг ягштал биелүүлэн хэвшил болгосон байх хэрэгтэй. Хичээлээр Vue -гийн програмын ажиллагааг хэрхэн оновчтой /оптимизаци/ болгохыг доорх жишээгээр

        <div id="app">
            <h2>Тоолуур {{ counter}} </h2>
            <h3>{{ condition }}</h3>
            <button @click="add">Нэмэх</button>
            <button @click="sub">Хасах</button>
        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            new Vue({
                el: '#app',
                data: {
                    counter: 0,
                    condition: 'Тоолуур 3-аас бага'
                },
                methods: {
                    add: function() {
                        this.counter ++
                        this.condition = this.counter > 3 ? 'Тоолуур 3-аас их' : 'Тоолуур 3-аас бага'
                    },
                    sub: function() {
                        this.counter --
                        this.condition = this.counter > 3 ? 'Тоолуур 3-аас их' : 'Тоолуур 3-аас бага'
                    }
                }
            })
        </script>        
    </body>

авч үзье. Хуудаст тоолуурын counter талбар, харьцуулалтын үр дүнгийн condition талбаруудыг үзүүлэх h2, h3 гарчигаас гадна тоолуурын утгыг нэмэх, хасах хоёр товч байгаа.

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

Өмнөх хичээлүүдэд бид хоёр хуудсыг үүсгээд тэдгээрт шилжих чиглүүлэгчийг (router) тохируулаад байгаа. Энэ удаад динамик чиглүүлэгчийг хэрхэн хэрэглэхийг авч үзье. Үүний тулд дараах тохиолдлыг авч үзье. Програмын Cars хуудаст машинуудын жагсаалтыг үзүүлэхээр болгон

<template>
  <div>
    <h1>Cars page</h1>
    <ul>
      <router-link
        tag="li"
        v-for="car in 5"
        :to="'/car/' +car"
        :key=car
      >
        <a>Car {{car}} </a>
      </router-link>
    </ul>
  </div>
</template>

гэж өөрчилье.

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

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

Энэ удаад Миксин /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),
})

бүртгүүлье.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

функцийн тодорхойлогдох мужийг ол.

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

 

g(x)=2x-3x2 нь f(x)=x2-x3 -ийн уламжлал бол -ийг ол.

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

 

хязгаарыг ол.

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