Yükleniyor...

Teleport

Teleport, Vue.js uygulamalarında kullanıcı arayüzü bileşenlerini DOM içinde farklı bir yere render etmek için kullanılan güçlü bir özelliktir. Normalde bir bileşen kendi ebeveyn öğesi içerisinde render edilir, ancak Teleport sayesinde bir bileşeni DOM’un herhangi bir başka noktasına taşıyabiliriz. Bu, özellikle modal pencereler, tooltipler, dropdown menüler veya global uyarılar gibi UI öğelerinin uygulamanın ana yapısını bozmadan gösterilmesi gerektiğinde kritik bir avantaj sağlar.
Teleport kullanımı, Vue.js’in reaktif veri yapıları ve olay yönetimi ile sorunsuz bir şekilde bütünleşir. Bileşenler, kendi mantıklarını korurken DOM’un farklı bir noktasında render edilebilir. Bu yaklaşım, yazılım mimarisinde modülerlik, yeniden kullanılabilirlik ve temiz bir yapı sağlar. Teleport ile çalışırken Vue.js’in temel kavramları olan template yapısı, ref/reactive kullanımı, v-if ve v-for ile dinamik render işlemleri ve POO prensipleri devreye girer.
Bu ileri seviye eğitimde, Teleport’un nasıl kullanılacağını, hangi senaryolarda avantaj sağladığını ve performans optimizasyonu ile bellek yönetimini nasıl etkilediğini öğreneceksiniz. Ayrıca pratik örneklerle, Teleport’un gerçek projelerde modalar, dropdown menüler ve overlay’ler için nasıl uygulanacağını göreceksiniz.

Temel Örnek <template>

text
TEXT Code
<div id="app">
<h1>Temel Teleport Örneği</h1>
<button @click="showModal = true">Modal Aç</button>

<teleport to="body">
<div v-if="showModal" class="modal">
<h2>Modal İçeriği</h2>
<p>Teleport kullanılarak farklı bir DOM noktasına render edildi.</p>
<button @click="showModal = false">Kapat</button>
</div>
</teleport>

</div>
</template>

<script setup>
import { ref } from 'vue';
const showModal = ref(false);
</script>

<style>
.modal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: white;
border: 1px solid #ccc;
padding: 20px;
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
}
</style>

Bu temel örnekte showModal reaktif değişkeni modalın görünürlüğünü kontrol eder. Teleport, <teleport> etiketiyle to="body" kullanılarak modal içeriğinin DOM’un body kısmına render edilmesini sağlar. Böylece modal, ana bileşen yapısını bozmaz. ref kullanımı, reaktif veri takibini sağlar ve bellek sızıntılarını önler. Modalın açılıp kapanması, Vue.js olay yönetimi ve reaktivite sistemi ile sorunsuz bir şekilde çalışır. Bu yapı, modüler bileşenler ve temiz kod prensipleri için örnek teşkil eder.

Pratik Örnek <template>

text
TEXT Code
<div id="app">
<h1>Pratik Teleport Örneği</h1>
<button @click="toggleDropdown">Dropdown Göster</button>

<teleport to="body">
<ul v-if="openDropdown" class="dropdown">
<li v-for="item in items" :key="item.id" @click="selectItem(item)">
{{ item.name }}
</li>
</ul>
</teleport>

<p v-if="selectedItem">Seçilen: {{ selectedItem.name }}</p>

</div>
</template>

<script setup>
import { ref } from 'vue';

const openDropdown = ref(false);
const selectedItem = ref(null);
const items = ref([
{ id: 1, name: 'Seçenek 1' },
{ id: 2, name: 'Seçenek 2' },
{ id: 3, name: 'Seçenek 3' }
]);

function toggleDropdown() {
openDropdown.value = !openDropdown.value;
}

function selectItem(item) {
selectedItem.value = item;
openDropdown.value = false;
}
</script>

<style>
.dropdown {
position: absolute;
top: 60px;
left: 50%;
transform: translateX(-50%);
background-color: #fff;
border: 1px solid #ccc;
list-style: none;
padding: 0;
}
.dropdown li {
padding: 10px 20px;
cursor: pointer;
}
.dropdown li:hover {
background-color: #f0f0f0;
}
</style>

Bu pratik örnek, dropdown menünün Teleport ile ana DOM yapısından bağımsız olarak render edilmesini gösterir. v-for ile dinamik olarak liste öğeleri oluşturulur, selectedItem seçimi kaydeder. key kullanımı performansı artırır ve reaktif veri yönetimi hatalarını önler. Teleport, modülerlik, performans optimizasyonu ve temiz kod yazımı açısından ileri seviye projelerde vazgeçilmezdir.

Vue.js Teleport için en iyi uygulamalar ve sık yapılan hatalar:

  • Teleport kullanırken to özniteliğini her zaman belirtin.
  • Reaktif veri yönetimi için ref veya reactive kullanın.
  • Gereksiz Teleport kullanımı performansı düşürebilir.
  • Lazy-loading ve v-if ile render optimizasyonu yapın.
  • Event listener ve watcher’ları temizleyerek bellek sızıntısını önleyin.
  • CSS çakışmalarını önlemek için scoped veya modüler stiller kullanın.
  • Olay yönetimini güvenli ve kontrollü uygulayın.
  • Tüm uygulama genelinde Teleport etkileşimlerini test edin.

📊 Referans Tablosu

Vue.js Element/Concept Description Usage Example <teleport> Bileşenleri ebeveyn dışına render eder <teleport to="body"><div>İçerik</div></teleport>

Teleport, Vue.js’de modüler ve performanslı kullanıcı arayüzleri oluşturmanın anahtarlarından biridir. Modal, dropdown ve overlay gibi bileşenleri ana DOM yapısından bağımsız yönetebilir. Öğrenciler bu konuyu tamamladıktan sonra Vue Router ve Pinia entegrasyonu ile Teleport’u daha ileri seviye state yönetimi ve navigasyon senaryolarında kullanabilirler. Bu, uygulama mimarisinde temiz, güvenli ve ölçeklenebilir çözümler üretmeye yardımcı olur.