Доод шатны /хүүхэд/ компонентоос параметр дамжуулах

Интернетэд сууриласан хөтөч дээр ажилладаг програмуудыг боловсруулахад javascript хэл чухал үүрэгтэй бөгөөд сүүлийн жилүүдэд javascript фреймворкуудын хөгжлийн үр дүнд нэг хуудаст програмчлалын аргачлал улам хүчтэй орж ирэх боллоо. Програмчлалын чиглэлээр сурч, ажиллаж байгаа залуучуудад зориулан Vuejs фреймворкийн хичээлүүдийг бэлтгэн оруулж байгаагийн ээлжит хичээлээр эцэг компонентоос хүүхэд компонентод параметрийг дамжуулахын зэрэгцээ хүүхэд компонентод үүссэн үйл явцыг эцэг компонент мэдэх асуудлыг хэрхэн шийдэхийг авч үзье. Үүний тулд Car компонентийн кодыг

<template>
  <div class="car">
    <h3>Name: {{ carName }} \ {{reverseName}}</h3>
    <p>Year: {{ carYear }}</p>
    <button @click="changeName">Нэрийг өөрчлөх</button>
  </div>
</template>

<script>
  export default {
    props: {
      carName: {
        type: String,
        default: 'Нэр байхгүй'
      },
      carYear: Number
    },
    methods: {
      changeName() {
        this.carName = 'Prius'
      }
    },
    computed: {
      reverseName() {
        return this.carName.split('').reverse().join('')
      }
    }
  }
</script>

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

Компонентийн шаблонд Нэрийг өөрчлөх товчийг нэмээд товч дээр дарах үйл явцын боловсруулагчийг methods талбарт тодорхойлон өгсөн. changeName арга carName параметрийн утгыг өөрчилнө. Ингэснээр Нэрийг өөрчлөх товчийг дарахад машины нэрийг Prius болгон өөрчлөхөөр болсон. Програмын ажиллагаа шалган

үзвэл Нэрийг өөрчлөх товчийг дарахад машины нэрийг Prius болгон өөрчлөн бүх зүйл хэвийн ажиллана. Хэрвээ хөтөчийн Inspect цонхны Console хэсгийг нээвэл тэнд

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

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

Програмын ажиллагааны логикоор carName талбарыг App компонентод тодорхойлоод түүнийг Car компонентод дамжуулан үзүүлнэ. Гэтэл бид Car компонентод carName талбарыг шууд өөрчилөхөд тухайн компонентод талбарын утга өөр болох ч эцэг компонентод тодорхойлогдсон утга хэвээр үлдсэн нь дээрх үр дүнгээс тодорхой харагдана. Үүнийг л консолд сануулаад байгаа хэрэг. Эндээс дүгнэвэл Car компонент хэвийн ажиллан машины нэрийг өөрчилж байгаа ч манай програмын ерөнхий логик тийм зөв ажиллахгүй байгаа нь тодорхой. Учир нь App компонентод тодорхойлогдсон carName талбарыг Car компонент өөрчилснөө эцэг компонентод мэдэгдээгүйтэй холбоотой юм. Эндээс carName талбарын утга Car компонентод өөрчлөгдсөнг эцэг буюу App компонентод хэрхэн мэдэгдэх вэ? гэсэн асуулт гарч ирнэ. Үнэн хэрэгтээ үүнийг их энгийнээр шийднэ. Car компонентийн кодыг

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

гэж өөрчилье. Кодын changeName аргад carName талбарын утгыг шууд өөрчлөхгүйгээр javascript обьект бүрд байдаг $emit аргаар эцэг компонентод талбарын өөрчлөлтийг мэдэгдэнэ. $emit арга эхний параметрээр үйл явцын нэрийг харин хоёрдахь параметрээр өөр компонентод дамжуулах утгыг авдаг. Иймээс changeName аргад carName талбарын утгыг шууд өөрчлөхгүйгээр this.$emit('nameChanged', 'Prius') гэж хүүхэд компонентод үүссэн nameChanged үйл явцын нэр, Prius -ийг дамжуулна. Үйл явцын нэрийг та өөрийн хүссэнээр өгч болно. Хүүхэд компонентод үүссэн үйл явцыг эцэг компонентод

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

гэж сонсоно. Үүний тулд Car компонентийг оруулан ирэх app-car тегд nameChanged үйл явцыг боловсруулагчийг v-on: директивээр холбон өгнө. v-on: директивийн бичлэгийг @ гэж хураангуйлдагийг Директивийн тэмдэглэгээ хичээлээс мэднэ. Үйл явцыг боловсруулагчийг App компонентийн methods талбарт тодорхойлоод дуудах эсхүл inline байдлаар шууд тодорхойлох боломжийг vuejs бидэнд олгодог тул carName = $event гэж өгсөн. Компонентоос ирсэн параметрүүдийг $event гэж авдагийг бид мэдэх учраас carName = $event бичлэг нь carName талбарын утгаар хүүхэд компонентоос ирсэн параметрүүдийн утгыг олгоно гэдгийг илэрхийлнэ.
Кодын өөрчлөлтөө хадгалаад хуудсаа шинэчлээд Нэрийг өөрчлөх товчийг дарахад

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

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

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

Хичээлээр react компонентийн элементүүдийн хэвжүүлэлтэд хэрэг болох нэгэн аргачлалыг авч үзье. Тухайлбал элементийг inline -аар хэвжүүлэлтийн үед ашиглах техник юм. Иймээс Car компонентийн хэвжүүлэлтийн Car.css файлаас

.Car {
  margin-bottom: 10px;
  display: block;
  padding: 10px;
  border-radius: 5px;
}

border, box-shadow хэвүүдийг хасан тэдгээрийг Car компонентод inline -аар хэвжүүлэлтээр

  const style = {
    border: '1px solid #ccc',
    boxShadow: '0 4px 5px 0 rgba(0, 0, 0, .14)'
  }
  return (
    <div className="Car" style={style}>
      <h3>Машиний нэр: {props.name}</h3>
      <p>Он: <strong>{props.year}</strong></p>
      <input
        type="text"
        onChange={props.onChangeName}
        value={props.name}
        className={inputClasses.join(' ')}
      />
      <button onClick={props.onDelete}>Устгах</button>
    </div>
  )

style хувьсагчид тодорхойлоод Car компонентийг багцалж буй div -ийн style атрибутад дамжуулах болгон өөрчилье.

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

Програмын төслийг боловсруулахдаа системийн ажиллагааг бие даасан, бие биеэсээ үл хамаарах хэсгүүдэд хуваан хэсэгчлэн кодлон тестлэхийг сайн практик гэж үздэг. Vuejs санд энэ аргачлалыг хэрэгжүүлэх суурь технологи бол компонент юм. Ер нь Vue -гийн төсөл төрөл бүрийн компонентуудаас бүрддэг тул хичээлийн материалыг сайтар судлан ойлгон авахыг хичээгээрэй. Хичээлээр компонент гэж юу болох, ямар хэрэгтэй гээд компоненттой холбоотой асуудлуудыг авч үзье. Асуудлыг энгийнгээс эхлэн ойлгох үүднээс

<!DOCTYPE html>
    <head>
        <meta charset="utf-8">
        <title>Компонент</title>
    </head>
    <body>
        <div id="app">

        </div>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            new Vue({
                el: '#app',
            })
        </script>        
    </body>
</html>

агуулга бүхий html файлыг авч үзье. Файлд app айдитай div блок түүнтэй холбосон Vue -гийн хувийг үүсгэсэн кодыг бид өмнөх хэсгээс мэднэ. 

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

Техник технологийн хөгжлийн үрээр бүхий л зүйл өөрчлөгдөн шинэчлэгдэж байдаг. Энэ үзэгдэл мэдээллийн технологийн салбарт бүр ч илүү хурдтай явдагийг бүгд мэднэ. Иймээс энэ салбарт ажиллаж буй мэрэгжилтэнүүд болон ажиллахаар бэлтгэгдэж байгаа залуусын хамгийн эхний зорилт бол хөгжлөөс хоцрохгүй байх юм. Сүүлийн жилүүдэд javascrip хэл маш хурдацтай хөгжин түүнийг програм зохиох ажилд улам өргөнөөр ашиглах болсон тул хэлийг сурч хөгжилтэй нь хөл нийлүүлэхэд туслах зорилгоор ES6 хэлний циклд шинээр нэмэгдсэн зүйлийн талаар энэ хичээлээр үзье.

Циклийн боломжийг дараах

const array = [1, 2, 3, 4, 5];

массиваар авч үзье. Дээрх массивын элементүүдийг консолд гаргахад өмнө хоёр аргыг ашиглаж болдогийн нэг бол for циклийг

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

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

<button v-on:click.prevent.stop="method">Button name</button>

бичлэг товч дээрх дарах үйл явцын v-on директивт prevent, stop модификаторуудыг дамжуулж байгаа. Иймээс бид өөрсдийн боловсруулсан директивтээ модификаторыг дамжуулан түүнтэй ажиллах боломжийг судлая.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

Кубын ирмэг a. Дээд талын төвийг суурийн оройтой холбоход үүсэх пирамидийн бүтэн гадаргуун талбайг ол.

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

 

A=(-2; 3; 5), B=(4; -1; 7) векторууд өгөгджээ. 3A-2B векторын координатуудын нийлбэрийг ол.

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

 

Утасны лавлах номыг дэлгэн 7 цифрээс бүрдсэн дугаарыг санамсаргүйгээр байдлаар сонгоход дугаарын сүүлийн дөрвөн цифрүүд ижил байх хувилбарын тоог ол.

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