# Vue 3 Composition API: Reaktivite ve Kompozisyon Rehberi > Vue 3 Composition API konusunda kapsamli rehber. ref, reactive, computed, watch ve composables kullanarak performansli Vue uygulamalari gelistirmek icin gereken her sey. - Published: 2026-01-07 - Updated: 2026-04-06 - Author: SharpSkill - Tags: vue 3, composition api, javascript, frontend, reactivity - Reading time: 12 min --- Vue 3'teki Composition API, bilesenlerin yapilandirilma biciminde kokenlu bir degisimi temsil eder. Kod, secenekler yerine islevsellik bazinda organize edilir; bu da mantik paylasimini ve karmasik uygulamalarin bakimini kolaylastirir. > **On Kosullar** > > Bu rehber, Vue.js hakkinda temel bilgi sahibi olunmasini varsayar. Orneklerde Vue 3.2 ile tanitilan ve artik onerilen yaklasim olan ` ``` Birbiriyle iliskili birden fazla ozelligi olan nesneler icin `reactive`, `.value` gerektirmeden daha dogal bir sozdizimi sunar. ```javascript // UserProfile.vue ``` Genel kural su sekildedir: ilkel degerler (string, number, boolean) icin `ref`, yapisal nesneler icin `reactive` kullanilir. ## computed ile Hesaplanmis Ozellikler Hesaplanmis ozellikler (computed), reaktif durumdan degerler turetir. Onbelleklenir ve yalnizca bagimliliklari degistiginde yeniden hesaplanir; bu da yuksek performans saglar. ```javascript // ProductList.vue ``` Hesaplanmis ozellikler, getter ve setter ile yazilabilir de olabilir; bu, cift yonlu donusumlerde kullanislidir. ```javascript // FullName.vue ``` ## watch ve watchEffect ile Izleyiciler Izleyiciler (watchers), veri degisikliklerine yanit olarak yan etkiler yurutur. Vue 3 iki yaklasim sunar: hassas kontrol icin `watch` ve otomatik bagimlilik takibi icin `watchEffect`. > **watch mi watchEffect mi?** > > `watch`, bagimliliklar uzerinde hassas kontrol saglar ve hem eski hem de yeni degeri sunar. `watchEffect` ise kullanilan tum reaktif bagimliliklarin etkiyi tetiklemesi gereken durumlarda daha basittir. ```javascript // SearchComponent.vue ``` Ic ice gecmis nesneleri veya dizileri izlemek icin `watch` ile `deep` secenegi gereklidir. ```javascript // DeepWatch.vue ``` ## Yeniden Kullanilabilir Composable'lar Olusturmak Composable'lar, yeniden kullanilabilir reaktif mantigi kapsulleyen fonksiyonlardir. Bu yaklasim, Composition API'nin bilesenler arasi kod paylasimi konusundaki en buyuk guclerinden biridir. ```javascript // composables/useFetch.js import { ref, watchEffect, toValue } from 'vue' // Composable for HTTP requests // Automatically handles loading, errors, and refetching export function useFetch(url) { const data = ref(null) const error = ref(null) const isLoading = ref(false) // Reusable fetch function async function fetchData() { isLoading.value = true error.value = null try { // toValue() allows accepting a ref or a value const response = await fetch(toValue(url)) if (!response.ok) { throw new Error(`HTTP ${response.status}`) } data.value = await response.json() } catch (e) { error.value = e.message } finally { isLoading.value = false } } // watchEffect for automatic refetch if url is a ref watchEffect(() => { fetchData() }) // Expose state and methods return { data, error, isLoading, refetch: fetchData } } ``` Olusturulan composable, herhangi bir bilesende bildirimsel olarak kullanilabilir. ```javascript // UserList.vue ``` Bir diger ornek, dogrulama iceren form durumu yonetimi icin bir composable'dir. ```javascript // composables/useForm.js import { reactive, computed } from 'vue' // Form management composable export function useForm(initialValues, validationRules) { // Form state const form = reactive({ values: { ...initialValues }, errors: {}, touched: {} }) // Validate a specific field const validateField = (field) => { const rules = validationRules[field] if (!rules) return true for (const rule of rules) { const result = rule(form.values[field]) if (result !== true) { form.errors[field] = result return false } } form.errors[field] = null return true } // Validate entire form const validate = () => { let isValid = true for (const field in validationRules) { if (!validateField(field)) { isValid = false } } return isValid } // computed: form is valid if no errors const isValid = computed(() => { return Object.values(form.errors).every(e => !e) }) // Mark a field as touched (to display errors) const touch = (field) => { form.touched[field] = true validateField(field) } // Reset the form const reset = () => { form.values = { ...initialValues } form.errors = {} form.touched = {} } return { form, isValid, validate, validateField, touch, reset } } ``` ## Yasam Dongusu Hook'larinin Yonetimi Composition API, yasam dongusu hook'larini setup icerisinde cagrilacak fonksiyonlar olarak sunar. Bu hook'lar, bilesenin yasam dongusunun belirli anlarinda kod calistirmayi saglar. > **Onemli: Temizlik Islemi** > > Bellek sizintilarini onlemek icin yan etkiler (zamanlayicilar, olay dinleyicileri, abonelikler) her zaman `onUnmounted` icerisinde temizlenmelidir. ```javascript // LifecycleDemo.vue ``` ## Template Ref'leri ve DOM Erisimi Template ref'leri, DOM ogelarina veya alt bilesen orneklerine dogrudan erisim saglar. Dogrudan manipulasyonun gerektigi durumlarda kullanisli olmaya devam eder. ```javascript // InputFocus.vue ``` ## Props ve Emits ile Ebeveyn-Cocuk Iletisimi Composition API, `defineProps` ve `defineEmits` ile prop ve olay bildirimlerini modernize eder ve daha iyi TypeScript entegrasyonu sunar. ```javascript // ChildComponent.vue ``` ```javascript // ParentComponent.vue ``` ## Provide ve Inject ile Bagimlilik Enjeksiyonu Uzak bilesenler arasinda prop drilling olmadan veri paylasimi icin Vue 3, `provide` ve `inject` mekanizmasini sunar. ```javascript // App.vue (or an ancestor component) ``` ```javascript // DeepNestedComponent.vue (anywhere in the tree) ``` ## Sonuc Vue 3 Composition API, Vue uygulama kodunun duzenlenmesi icin guclu ve esnek bir yaklasim sunar. Hatirlanmasi gereken temel kavramlar: - **ref** ilkel degerler icin, **reactive** karmasik nesneler icin - **computed** otomatik onbellekleme ile turetilmis degerler icin - **watch** ve **watchEffect** reaktif yan etkiler icin - **Composable'lar** bilesenler arasi mantik cikarimi ve yeniden kullanimi icin - **Fonksiyonel yasam dongusu hook'lari** (`onMounted`, `onUnmounted` vb.) - **provide/inject** prop drilling olmadan bagimlilik enjeksiyonu icin Bu yaklasim, mukemmel TypeScript entegrasyonu sunarken bakimi kolay ve test edilebilir uygulamalar olusturmayi kolaylastirir. Bir sonraki adim, asenkron composable'lar ve global durum yonetimi icin Pinia entegrasyonu gibi ileri duzey kaliplari kesfetmek olabilir. --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/tr/blog/vue-nuxt/vue-3-composition-api-complete-guide