Hangi hook ne zaman çalışır?
Vue ve Nuxt uygulamaları reaktif yapısıyla oldukça sezgisel olsa da, lifecycle’lar (yaşam döngüleri) devreye girdiğinde işler karışabiliyor.
Bir sayfadan diğerine geçerken hangi hook ne zaman çalışıyor, layout ne zaman mount ediliyor, useAsyncData çağrısı tam olarak nerede devreye giriyor?
Temel Mantık
Nuxt 3’te üç ana katman vardır:- Layout → Sayfa iskeleti (örneğin navbar, footer).
- Page → Route’a özel içerik.
- Component → Page içinde kullanılan alt bileşenler.
Sayfa Yüklenme Akışı (SSR Aşaması)
SSR modunda bir sayfa ilk kez yüklendiğinde olaylar şu sırayla gelişir:- Server-side setup →
useAsyncData,useFetchçağrıları başlatılır. - Server render → HTML oluşturulur ve istemciye gönderilir.
- Hydration → Client tarafında Vue instance yeniden başlatılır.
- onBeforeMount → Vue bileşeni DOM’a eklenmeden hemen önce çalışır.
- onMounted → DOM artık hazır. Tarayıcı odaklı işlemler yapılabilir.
setup() ve useAsyncData() aktif olur. Diğer lifecycle hook’lar (örneğin onMounted) yalnızca client tarafında çalışır.Route Değişimi Akışı (CSR Aşaması)
Kullanıcı yeni bir sayfaya yönlendiğinde, SSR devre dışıdır. Bu kez olaylar şöyle ilerler:- onBeforeRouteLeave (eski sayfa) → Sayfa değişmeden önce çalışır. Cleanup veya uyarı işlemleri için idealdir.
- onBeforeRouteUpdate (layout/page) → Aynı layout içinde route parametresi değiştiyse tetiklenir.
- Page setup() → Yeni sayfanın setup aşaması çalışır.
useAsyncDataçağrıları burada yapılır. - onBeforeMount (yeni sayfa) → Bileşen DOM’a eklenmeden önce.
- onMounted (yeni sayfa) → Görsel render tamamlandı.
- onUpdated (page/component) → Reaktif değişiklikler sonrası DOM güncellenirse çalışır.
Layout ve Page Hook’larının Hiyerarşisi
| Aşama | Layout Hook | Page Hook |
|---|---|---|
| Server Render | setup() | setup() |
| Hydration | onBeforeMount | onBeforeMount |
| Mount | onMounted | onMounted |
| Route Update | onBeforeRouteUpdate | onBeforeRouteUpdate |
| Unmount | onUnmounted | onUnmounted |
Örnek Akış: Blog Sayfası → Blog Detay
Varsayalım/blog sayfasından /blog/123 detayına geçiyorsun.- Layout (örneğin
default.vue) değişmez, yalnızca sayfa güncellenir. onBeforeRouteUpdate→ Layout ve Page seviyesinde tetiklenir.- Page setup yeniden çalışır (
useAsyncDatayeniden fetch eder). onMounted→ Yeni içerik DOM’a eklendiğinde devreye girer.
onBeforeRouteLeave ve onBeforeRouteUpdate Kullanımı
Sayfadan çıkmadan önce uyarı:onBeforeRouteLeave((to, from) => {
if (formChanged.value) {
const confirmLeave = confirm('Değişiklikler kaydedilmedi. Çıkmak istiyor musun?')
if (!confirmLeave) return false
}
})
Parametre değişiminde API’yi yeniden çağır:
onBeforeRouteUpdate((to) => {
fetchPost(to.params.id)
})
Bu hook, sayfa yeniden oluşturulmadan parametre değişimlerinde bile veri güncellenmesini sağlar.
Pro Tip: Global Hook Yönetimi
Nuxt’taapp.vue veya layouts/default.vue içine global hook’lar ekleyebilirsin. Örneğin route geçişlerinde loading animasyonu göstermek:onBeforeRouteUpdate(() => startLoading())
onBeforeRouteLeave(() => stopLoading())
Ayrıca defineNuxtPlugin içinde global router guard tanımlayabilirsin:export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.hook('page:start', () => console.log('Yeni sayfa yükleniyor...'))
nuxtApp.hook('page:finish', () => console.log('Sayfa yüklendi!'))
})
Lifecycle Sırası Özet Akışı
SSR aşaması: setup() → render → hydration
CSR aşaması: onBeforeRouteLeave → setup() → onMounted → onUpdated → onUnmounted
Layout yalnızca değiştiğinde yeniden mount edilir. Page component her route değişiminde yeniden çalışır.Sık Yapılan Hatalar
- useAsyncData’yı
onMountediçinde çağırmak → SSR’de veri kaçırılır. onMountediçindeuseRouteparametresiyle veri çekmek → Route değişimlerinde güncellenmez.- Layout’u
keep-alivegibi davranacağını varsaymak → Layout yeniden mount olabilir, state kaybolur. - Route geçişlerinde reactive state’leri sıfırlamayı unutmak → Eski veriler yeni sayfaya taşınır.
Sonuç
Nuxt 3, Lifecycle akışını hem SSR hem CSR arasında dengeli bir şekilde yönetir. Bunu anlamak, veri çekme, animasyon, cache veya auth gibi sistemlerde doğru zamanda işlem yapmanı sağlar.Kısaca:
- SSR → setup & useAsyncData
- CSR → onBeforeRouteUpdate & onMounted
- Layout → yalnızca değişirse yenilenir
Doğru hook’u doğru anda kullanmak, Nuxt uygulamanın akışını kusursuz hale getirir.