Yönlendirme
Yönlendirme
İstemci Tarafı vs. Sunucu Tarafı Yönlendirme
Sunucu tarafında yönlendirme, sunucunun kullanıcının ziyaret ettiği URL yoluna göre bir yanıt gönderdiği anlamına gelir. Geleneksel bir sunucu tarafından render edilen web uygulamasında bir bağlantıya tıkladığımızda, tarayıcı sunucudan bir HTML yanıtı alır ve yeni HTML ile tüm sayfayı yeniden yükler.
Ancak bir Tek Sayfa Uygulaması (SPA) durumunda, istemci tarafındaki JavaScript, gezinmeyi yakalayabilir, dinamik olarak yeni verileri alabilir ve mevcut sayfayı tam sayfa yeniden yüklemeleri olmadan güncelleyebilir. Bu genellikle, kullanıcıların uzun bir süre boyunca birçok etkileşimde bulunması beklenirken, daha gerçek "uygulama" benzeri kullanım durumlarında daha hızlı bir kullanıcı deneyimi ile sonuçlanır.
Bu tür SPAlarda, "yönlendirme" tarayıcıda, istemci tarafında gerçekleştirilir. — Vue.js Belgeleri
Bir istemci tarafı yönlendiricisi, Tarih API veya hashchange
olayı gibi tarayıcı API'lerini kullanarak uygulamanın render edilmiş görünümünü yönetmekten sorumludur.
Resmi Yönlendirici
Vue, SPAlar oluşturmak için iyi bir şekilde uyum sağlamaktadır.
Vue School'da Ücretsiz Video Kursunu İzleyin
Çoğu SPA için, resmi olarak desteklenen Vue Router kitaplığını kullanmanız önerilir. Daha fazla bilgi için Vue Router'ın belgelerine bakın.
Sıfırdan Basit Yönlendirme
Sadece çok basit bir yönlendirmeye ihtiyacınız varsa ve tam özellikli bir yönlendirici kitaplığı kullanmak istemiyorsanız, bunu Dinamik Bileşenler
ile yapabilir ve mevcut bileşen durumunu tarayıcıdaki hashchange
olaylarını dinleyerek veya Tarih API kullanarak güncelleyebilirsiniz.
İşte yalın bir örnek:
<script setup>
import { ref, computed } from 'vue'
import Home from './Home.vue'
import About from './About.vue'
import NotFound from './NotFound.vue'
const routes = {
'/': Home,
'/about': About
}
const currentPath = ref(window.location.hash)
window.addEventListener('hashchange', () => {
currentPath.value = window.location.hash
})
const currentView = computed(() => {
return routes[currentPath.value.slice(1) || '/'] || NotFound
})
</script>
<template>
<a href="#/">Ana Sayfa</a> |
<a href="#/about">Hakkında</a> |
<a href="#/non-existent-path">Kırık Bağlantı</a>
<component :is="currentView" />
</template>
<script>
import Home from './Home.vue'
import About from './About.vue'
import NotFound from './NotFound.vue'
const routes = {
'/': Home,
'/about': About
}
export default {
data() {
return {
currentPath: window.location.hash
}
},
computed: {
currentView() {
return routes[this.currentPath.slice(1) || '/'] || NotFound
}
},
mounted() {
window.addEventListener('hashchange', () => {
this.currentPath = window.location.hash
})
}
}
</script>
<template>
<a href="#/">Ana Sayfa</a> |
<a href="#/about">Hakkında</a> |
<a href="#/non-existent-path">Kırık Bağlantı</a>
<component :is="currentView" />
</template>