Sales2 min read375 words

Vue.js : Componentler arası haberleşme

Burak Kaşıkcı

PlusClouds Author

Cloud & SaaS

Vue.js : Componentler Arası Haberleşme

Vue.js ile bir uygulama geliştirirken, tüm parçaları ayrı bir component olarak ayırıyor, bunun üzerine bir yapı kuruyoruz. Bu bize hem daha düzenli bir yapı sunarken, hem de tekrar tekrar aynı kodu yazmamızı veya bir değişiklikte onlarca yerde aynı düzenlemeyi yapmamızı engelliyor.

Bu tabiki sadece Vue.js'e özel veya burada önerilen birşey değil ve bu konu ile ilgili olarak DRY (Don't Repeat Yourself) ismi verilen genel bir yazılım prensibi var. Bu prensip yazılımın en temel prensiplerinden biridir ve kod tekrarlarından sakınılması gerektiğini savunur. (The Pragmatic Programmer kitabında DRY olarak isimlendirilmiş ve genişçe açıklanmıştır.)

Bizde bu prensibe ve mantığa uyarak componentler oluşturarak ayağa kaldırdığımız projelerimizde, dinamik verilere sahibiz ve bunları ana componentten alt componentlere (parent to child), alt componentten ana componente (child to parent) ve alt seviyedeki componentler arası (child to child) taşımamız gerekiyor. Bu data taşıma işlemlerini nasıl yapacağımıza bakalım.

Parent - Child arası iletişim için :props


Parent component'ten child component'e veriyi aktarırken props yapısını kullanıyoruz. Props ile gönderdiğimiz veriyi child component'te, data içerisinde tanımladığımız bir değer gibi kullanabiliyoruz.

Parent Component

 
//Burada title değerine statik bir değer atıyoruz.

<child-component :title="item.Title />
//Burada child component içerisinde tanımladığımız title değerine, parent component'teki item içerisinde tanımladığımız Title değerini gönderiyoruz.


Karşılarken ise şu şekilde kullanabiliriz.

Child Component
<div class=" editor-image="" is-normal"="">


Child - Parent arası iletişim için $emit


Parent'ten child'a props ile datayı aktarmıştık, burada da tam tersi bir işlem yapmamız gerekiyor ve veriyi yukarı doğru fırlatmamız gerekiyor. Bunun için de emit yapısını kullanıyoruz. Kısa bir örnek vermek gerekir ise this.$emit("result", item) şeklinde kullanabiliriz.

Yukarıdaki örnekten devam edersek şöyle bir sonucumuz olacak;

Child Component


Parent içerisinde bu emitleri yakalamak için @emitAdı veya v-on:emitAdı olarak kullanıyoruz.

Parent Component


Child - Child arası iletişim için event-bus


Burada parent - child arasındaki ilişki gibi direk bir ilişkimiz olmadığı için bir aracı kullanmamız gerekiyor ve biz burada eventbus nesnesini kullanıyoruz. Bu nesneyi herhangi bir dom elemanına bağlanmayan bir vue nesnesi olarak oluşturuyoruz ve bu nesneyi sadece veri iletirken kullanacağız. Tüm componentler buraya event yollayabilecekler ve burayı dinleyen tüm componentler gelen dataya göre aksiyon alabilecekler.

Burada öncelikle event-bus.js içerisine belirttiğimiz şekilde bir eventBus nesnesi ekleyeceğiz.

Daha sonra bunu kullanacağımız sayfalarda import etmemiz yeterli olacak. Şimdi sadece 2 component arası kullanacağımız için global'de tanımlamadık.

Şimdiki örneğimizde A componentindeki başlığı, B componentindeki butona basarak güncelleyelim.

Child A Component

Child B Component

Bu üstteki 3 yöntem ile componentler arasındaki data aktarımlarını yapabiliyoruz.

Frequently Asked Questions

Parent'ten child'a veri aktarımı için hangi yapı kullanılır?

Prop kullanılır. Parent component'ten child component'e veriyi aktarırken props yapısını kullanıyoruz. Child component'te bu veriyi, data içinde tanımladığımız bir değer gibi kullanıyoruz. Bu yaklaşım, componentler arasında tekrarı azaltmaya yardımcı olur.

Child'dan Parent'a veri iletimi nasıl gerçekleştirilir?

Çocuk component'ten ana componente veri göndermek için $emit kullanılır. Örnekte item bu şekilde iletilir ve Parent bu emitleri ilgili ad ile yakalar. Parent tarafında bu emitler @emitAdı veya v-on:emitAdı ile yakalanır.

Child-Child iletişiminde hangi yöntem kullanılır?

Event-bus kullanılır. Bu, parent-child ilişkisi olmayan komponentler arasında iletişimi sağlar. EventBus nesnesi bir Vue nesnesi olarak oluşturulur ve ilgili sayfalarda import edilerek kullanılır.

DRY prensibi nedir ve Vue projelerinde nasıl uygulanır?

DRY, Don’t Repeat Yourself ifadesinin kısaltmasıdır ve kod tekrarlarından kaçınmayı savunur. Bu prensibi projede componentler oluşturarak ve tekrarı azaltarak uygularız.

Props ile gelen veriyi child component'te nasıl kullanırız?

Prop ile gelen veri, child component'te data içinde tanımladığımız bir değer gibi kullanılır. Böylece dışarıdan gelen değeri component içinde dinamik olarak işleyebiliriz.

Bu üç iletişim yöntemi hangi durumlarda kullanılır?

Proplar parent'tan child'a veri aktarımı için kullanılır. Emitler child'tan parent'a veri iletimi için kullanılır. Event-bus ise non-direct ilişkili veya kardeş komponentler arasındaki iletişim için kullanılır.

Bir örnekte bu yöntemlerle nasıl bir güncelleme yapılır?

Şimdiki örnekte A componentindeki başlık, B componentindeki butona basarak güncellenir. Bunun için event-bus kullanılır; eventBus nesnesi ilgili dosyada tanımlanır ve iki component arasında iletişim kurulur.

Related Reading

Posts tagged with:

More from the blog

All posts