Хүүхэд компонент хоорондын холбоо

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

<template>
  <div>
    <h1>Тоолуур: {{ counter }}</h1>
  </div>  
</template>

<script>
export default {
  props: ['counter']    
}
</script>

кодтой Counter.vue компонентийг үүсгэе. Counter компонент өөртөө ирэх параметрийн утгыг h1 тегд тоолуурын утгаар л үзүүлнэ.

Нэг түвшингийн хоёр компонентийг үүсгэхийн тулд Counter компонентийг App компонентод

<template>
  <div>
    <h1>Эцэг: {{ carName }}</h1>
    <app-counter :counter="counter"></app-counter>
    <app-car
      :carName="carName"
      :carYear="carYear"
      :counter="counter"
      :changeFunc="changeCarName"
      @nameChanged = "carName = $event"
    ></app-car>  
  </div>
</template>

<script>
import Car from './components/Car.vue'
import Counter from './components/Counter.vue'

export default {
  data () {
    return {
      carName: 'Toyota',
      carYear: 2018,
      counter: 0
    }
  },
  methods: {
    changeCarName() {
      this.carName = 'Benz'
    }
  },
  components: {
    appCar: Car,
    appCounter: Counter
  }
}
</script>

бүртгүүлэн ашиглана. Кодын нэмэлтийн тухайд гэвэл import Counter from './components/Counter.vue' команд компонентийг components хавтасны Counter.vue файлаас импортлохыг заана. Дараа нь бид компонентийг App компонентоос экспорт хийх обьектийн components талбарын обьектод нэмэн өгөх ёстой. Үүний дараа компонентийг App компонентийн хэвд <app-counter :counter="counter"></app-counter> гэж Counter компонентийг оруулан ирнэ. Counter компонентод counter параметрийг counter талбартай холбон дамжуулах учраас data функцээс буцаах обьектод counter талбарыг 0 утгатайгаар үүсгэсэн. Ингэснээр App компонент Car, Counter гэсэн нэг түвшингийн хоёр хүүхэд компоненттой болсон. Хичээлийн зорилго нэг түвшингийн компонентууд хоорондын харьцаа учраас гол асуудал бол Car компонентоос Counter компонентийн тоолуурын утгыг өөрчлөх юм. Иймээс эцэг App компонентод тодорхойлогдсон counter талбарыг Car компонентоос удирдахын тулд түүнийг параметрээр :counter="counter" гэж Car компонентод дамжуулж байгааг анхаарна уу. Өөрөөр хэлбэл App компонентод тодорхойлогдсон counter талбарыг доод түвшингийн хоёр компонентод хоёуланд нь параметрээр дамжуулсанаар тэд хоорондоо харьцах боломжийг бүрдүүлж байгаа хэрэг. Одоо Car компонентийн кодыг

<template>
  <div class="car">
    <h3>Name: {{ carName }} \ {{reverseName}}</h3>
    <p>Year: {{ carYear }}</p>
    <button @click="changeName">Нэрийг өөрчлөх</button>
    <button @click="changeFunc()">Эцгээс нэрийг өөрчлөх</button>
    <button @click="updateCounter">Тоолуурыг нэмэгдүүлэх</button>
  </div>
</template>

<script>
  export default {
    props: {
      carName: {
        type: String,
        default: 'Нэр байхгүй'
      },
      carYear: Number,
      changeFunc: Function,
      counter: Number
    },
    methods: {
      changeName() {
        this.$emit('nameChanged', 'Prius')
      },
      updateCounter() {
        this.$emit('counterUpdated', 1)
      }
    },
    computed: {
      reverseName() {
        return this.carName.split('').reverse().join('')
      }
    }
  }
</script>

<style>
  .car {
    border: 1px solid green;
  }
</style>

болгон өөрчилнө. Компонентод эцэг компонентоос бас нэг параметр нэмэгдэн ирэх тул түүнийг props талбарын обьектод counter: Number гэж нэмнэ. Тоолуурыг Car компонентоос удирдахын тулд түүний шаблонд Тоолуурыг нэмэгдүүлэх товчийг нэмээд товч дээр дарах үйл явцын боловсруулагч updateCounter -ийг холбоно. Үүний дараа Car компонентоос экспортлогдох обьектийн methods талбарт updateCounter аргыг нэмэн оруулна. updateCounter арга changeName аргатай ижил counterUpdated үйл явцыг үүсгээд түүнд 1 утгыг дамжуулна. Үүнийг бид Доод шатны /хүүхэд/ компонентоос параметр дамжуулах хичээлд дэлгэрэнгүй үзсэн. Одоо програмыг ажлуулбал

дээрх хуудсыг үзүүлэх боловч Тоолуурыг нэмэгдүүлэх товчийг дарахад тоолуурын утга нэмэгдэхгүй. Яагаад товч ажиллахгүй байгаа шалтгааныг олохыг танд үлдээе. Асуудлыг шийдлийг event emiter -ийг ашиглах хичээлээс үзээрэй.

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

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

Өмнөх хичээлүүдийн кодод директивүүдийг ашиглаж байсан ч тэдгээрийг Vue фреймворкийн тодорхой хэрэгсэл байдлаар ойлгон хэрэглэж ирсэн. Одоо директивүүдийн талаар дэлгэрүүлэн судлаж ойлголтоо гүнзгийрүүлэх цаг болсон. Директив гэдэг нь html шаблоны дотор ашиглан хуудасны элементүүдтэй харьцан ажиллах боломжийг өгдөг тусгай атрибут юм. Өмнөх хичээлүүдэд бид v-on, v-bind гэх мэтийн директивүүдийг их олон ашигласан. Энэ хичээлээр бид өөрсдийн директивийг үүсгэн ашиглаж сурцгаах болно. Хичээлд ашиглах төсөл доорх код бүхий

<template>
  <div>
      <h2>{{ title }}</h2>  
  </div>
</template>

<script>
export default {
  data () {
    return {
      title: "Hello I am Vue!"
    }
  }
}
</script>

<style scoped>

</style>

нэг App.vue компонентоос бүрдэнэ.

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

Vue CLI хэрэгслэээр үүсгэсэн төслийн эхлэлийн цэг бол

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

Vue.config.productionTip = false

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

кодийг агуулсан main.js файл юм. npm run serve командаар ачааллагдах боловсруулалтын сервер хандан ажиллах public хавтас доторх index.html файлд

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

Хичээлээр react -ийн хамгийн чухал бөгөөд хэрэгтэй хукуудийн нэг болох useCallback -ийн талаар авч үзье. Хукийн судалгааг дараах

import React, {useState} from 'react'

function App() {
  const [colored, setColored] = useState(false)
  const [count, setCount] = useState(1)
    
  const styles = {
      color: colored ? 'darkred' : 'black'
  }
    
  return (
      <div className="container">
        <h1 style={styles}>Элементийн тоо: {count}</h1>
        <button className={'btn btn-success mx-3'} onClick={() => setCount(prev => prev + 1)}>Нэмэх</button>
        <button className={'btn btn-warning mx-3'} onClick={() => setColored(prev => !prev)}>Өөрчлөх</button>
      </div>
  );
}

export default App;

кодоор авч үзье. Компонентийн код логикийн хувьд өмнөх хичээлүүдийнхтэй бараг ижил тул тайлбарлах нь илүүц гэж үзлээ.

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

Хөтөч дээр ажилладаг интернетэд сууриласан програмын боловсруулалт хийхэд javascript хэлийг ашиглах шаардлага зүй ёсоор гарч ирдэг. Иймээс хөтөчүүд ойлгон ажилладаг энэхүү хэлийг програм зохиогчид заавал мэдэж байх хэрэгтэй. Энэ удаад ES6 -д мөрүүдтэй ажиллаха ажиллагаанд орсон өөрчлөлтүүд тэдгээртэй ажиллах ажиллагаа хир хөнгөн болсонг үзье. Эхлээд мөрүүдийг хооронд нь холбох тохиолдолыг авч үзье. Бидэнд

let name = 'e-surgalt.com';
let str = 'Манай сайтад зочилсонд танд баярлалаа!';

хоёр мөр байлаа гэе. str хувьсагчид name хувьсагчийг оруулан шинэ мөрийг гаргахын тулд өмнө нь холболтын операторыг

let name = 'e-surgalt.com';
let str = 'Манай ' + name + ' сайтад зочилсонд танд баярлалаа!';
console.log(str);

гэж ашигладаг байсан.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

Хоёр тойрог гадна талаараа шүргэлцсэн. Нэг тойргийн шүргэгч нь нөгөө тойргийнхоо төвийг дайран гарсан. Шүргэлтийн цэгээс хоёрдахь тойргийн төв хүртэлх зай нь энэ тойргийн радиусаас 3 дахин урт. Нэгдүгээр тойргийн урт хоёрдугаар тойргийн уртаас хэд дахин их вэ?

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

 

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

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

 

бол илэрхийллийн утгыг ол.

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