{"id":38846,"date":"2026-02-08T21:41:30","date_gmt":"2026-02-08T18:41:30","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38846"},"modified":"2026-02-08T21:41:30","modified_gmt":"2026-02-08T18:41:30","slug":"vue-js-ile-reaktif-veri-akisi-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/","title":{"rendered":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma"},"content":{"rendered":"<p><body><\/p>\n<h2>Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma<\/h2>\n<p>Modern web uygulamalar\u0131, s\u00fcrekli de\u011fi\u015fen verilerle dinamik bir \u015fekilde etkile\u015fim kurma ihtiyac\u0131 duyar. Kullan\u0131c\u0131 aray\u00fczlerinin, temel veri kaynaklar\u0131ndaki de\u011fi\u015fikliklere an\u0131nda tepki vermesi, kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. \u0130\u015fte bu noktada reaktif veri ak\u0131\u015flar\u0131 devreye girer. Vue.js, temelden reaktif olacak \u015fekilde tasarlanm\u0131\u015f bir JavaScript \u00e7er\u00e7evesidir ve bu \u00f6zelli\u011fi sayesinde karma\u015f\u0131k veri ak\u0131\u015flar\u0131n\u0131 y\u00f6netmek i\u00e7in m\u00fckemmel bir ara\u00e7t\u0131r. Bu rehberde, Vue.js&#8217;in g\u00fcc\u00fcn\u00fc kullanarak nas\u0131l sa\u011flam, y\u00f6netilebilir ve reaktif bir veri ak\u0131\u015f\u0131 olu\u015fturaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. API&#8217;lerden gelen verileri almaktan, bu verileri d\u00f6n\u00fc\u015ft\u00fcrmeye, hata y\u00f6netiminden performansa kadar t\u00fcm s\u00fcreci ele alaca\u011f\u0131z.<\/p>\n<h3>Temelleri Anlamak: Reaktiflik ve Veri Ak\u0131\u015f\u0131<\/h3>\n<p>Reaktiflik, bir veri par\u00e7as\u0131n\u0131n de\u011fi\u015fti\u011finde, bu veriye ba\u011fl\u0131 olan t\u00fcm bile\u015fenlerin ve hesaplamalar\u0131n otomatik olarak g\u00fcncellenmesi yetene\u011fidir. Vue.js&#8217;in temelinde yatan bu mekanizma, manuel DOM manip\u00fclasyonu ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r ve geli\u015ftiricilerin veri durumuna odaklanmas\u0131n\u0131 sa\u011flar. Bir &#8220;reaktif veri ak\u0131\u015f\u0131&#8221; ise, verinin bir kaynaktan al\u0131n\u0131p, \u00e7e\u015fitli d\u00f6n\u00fc\u015f\u00fcm ve i\u015fleme ad\u0131mlar\u0131ndan ge\u00e7erek nihayetinde kullan\u0131c\u0131 aray\u00fcz\u00fcne ula\u015fmas\u0131na kadar olan t\u00fcm s\u00fcreci ifade eder. Bu ak\u0131\u015f i\u00e7indeki herhangi bir veri par\u00e7as\u0131n\u0131n de\u011fi\u015fimi, zincirleme bir reaksiyonla t\u00fcm ilgili k\u0131s\u0131mlar\u0131 g\u00fcnceller.<\/p>\n<p>Vue 3&#8217;te reaktiflik, <code>ref<\/code> ve <code>reactive<\/code> API&#8217;leri ile sa\u011flan\u0131r:<\/p>\n<p>*   <code>ref<\/code>: Temel de\u011ferleri (string, number, boolean) reaktif hale getirmek i\u00e7in kullan\u0131l\u0131r. <code>.value<\/code> \u00f6zelli\u011fi ile eri\u015filir ve de\u011fi\u015ftirilir.<br \/>\n*   <code>reactive<\/code>: Nesneleri (object, array, Map, Set) reaktif proxy&#8217;lere d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Do\u011frudan nesnenin \u00f6zelliklerine eri\u015filir ve de\u011fi\u015ftirilir.<\/p>\n<pre><code class=\"language-javascript\">import { ref, reactive, computed, watch } from 'vue';\n\n\/\/ ref ile reaktif bir say\u0131\nconst sayac = ref(0);\nconsole.log(sayac.value); \/\/ 0\nsayac.value++;\nconsole.log(sayac.value); \/\/ 1\n\n\/\/ reactive ile reaktif bir nesne\nconst kullanici = reactive({\n  ad: 'Ali',\n  soyad: 'Y\u0131lmaz',\n  yas: 30\n});\nconsole.log(kullanici.ad); \/\/ Ali\nkullanici.yas = 31;\nconsole.log(kullanici.yas); \/\/ 31\n\n\/\/ computed ile t\u00fcretilmi\u015f reaktif durum\nconst tamAd = computed(() => {\n  return <code>${kullanici.ad} ${kullanici.soyad}<\/code>;\n});\nconsole.log(tamAd.value); \/\/ Ali Y\u0131lmaz\n\n\/\/ watch ile yan etkileri izleme\nwatch(sayac, (yeniDeger, eskiDeger) => {\n  console.log(<code>Sayac de\u011fi\u015fti: ${eskiDeger} -> ${yeniDeger}<\/code>);\n});\n\nsayac.value = 5; \/\/ Konsola \"Sayac de\u011fi\u015fti: 1 -> 5\" yazd\u0131r\u0131r<\/code><\/pre>\n<p><code>computed<\/code> \u00f6zellikleri, mevcut reaktif duruma dayal\u0131 olarak yeni reaktif durumlar t\u00fcretmek i\u00e7in kullan\u0131l\u0131r. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015fti\u011finde otomatik olarak yeniden hesaplan\u0131rlar ve pahal\u0131 hesaplamalar\u0131 \u00f6nlemek i\u00e7in \u00f6nbelle\u011fe al\u0131n\u0131rlar. <code>watch<\/code> ise, bir veya daha fazla reaktif veriyi izlemek ve bu veriler de\u011fi\u015fti\u011finde belirli bir yan etkiyi (\u00f6rne\u011fin, bir API \u00e7a\u011fr\u0131s\u0131 yapmak, yerel depolamaya kaydetmek) ger\u00e7ekle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Bu temel yap\u0131 ta\u015flar\u0131, karma\u015f\u0131k veri ak\u0131\u015flar\u0131n\u0131n in\u015fas\u0131nda bize b\u00fcy\u00fck esneklik sa\u011flar.<\/p>\n<h3>Veri Kaynaklar\u0131ndan Ak\u0131\u015f Olu\u015fturma<\/h3>\n<p>Reaktif veri ak\u0131\u015f\u0131n\u0131n ba\u015flang\u0131c\u0131, verinin al\u0131nd\u0131\u011f\u0131 kaynakt\u0131r. Bu kaynaklar genellikle REST API&#8217;leri, GraphQL u\u00e7 noktalar\u0131, WebSocket ba\u011flant\u0131lar\u0131 veya hatta yerel depolama olabilir. Vue bile\u015fenlerinizde veya durum y\u00f6netimi \u00e7\u00f6z\u00fcmlerinizde (Pinia\/Vuex) bu verileri al\u0131p reaktif duruma entegre etmeniz gerekir.<\/p>\n<p>API&#8217;lerden veri \u00e7ekmek i\u00e7in genellikle <code>fetch<\/code> API&#8217;si veya pop\u00fcler <code>axios<\/code> k\u00fct\u00fcphanesi kullan\u0131l\u0131r. <code>axios<\/code>, \u00f6zellikle istek ve yan\u0131t interceptor&#8217;lar\u0131, otomatik JSON d\u00f6n\u00fc\u015f\u00fcm\u00fc ve hata y\u00f6netimi gibi \u00f6zellikleriyle tercih edilir.<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/components\/UrunListesi.vue\n<template>\n  <div>\n    <h2>\u00dcr\u00fcnler<\/h2>\n    <p v-if=\"yukleniyor\">\u00dcr\u00fcnler y\u00fckleniyor...<\/p>\n    <p v-if=\"hataMesaji\">{{ hataMesaji }}<\/p>\n    <ul v-if=\"urunler.length\">\n      <li v-for=\"urun in urunler\" :key=\"urun.id\">{{ urun.ad }} - {{ urun.fiyat }} TL<\/li>\n    <\/ul>\n  <\/div>\n<\/template>\n\n<script setup>\nimport { ref, onMounted } from 'vue';\nimport axios from 'axios';\n\nconst urunler = ref([]);\nconst yukleniyor = ref(true);\nconst hataMesaji = ref(null);\n\nconst urunleriGetir = async () => {\n  yukleniyor.value = true;\n  hataMesaji.value = null;\n  try {\n    const response = await axios.get('https:\/\/api.example.com\/urunler'); \/\/ \u00d6rnek API\n    urunler.value = response.data;\n  } catch (error) {\n    console.error('\u00dcr\u00fcnleri \u00e7ekerken hata olu\u015ftu:', error);\n    hataMesaji.value = '\u00dcr\u00fcnler y\u00fcklenirken bir sorun olu\u015ftu.';\n  } finally {\n    yukleniyor.value = false;\n  }\n};\n\nonMounted(() => {\n  urunleriGetir();\n});\n<\/script><\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, bir bile\u015fen y\u00fcklendi\u011finde (<code>onMounted<\/code>) API&#8217;den \u00fcr\u00fcn verilerini \u00e7ekiyoruz. <code>ref<\/code> ile tan\u0131mlanan <code>urunler<\/code>, <code>yukleniyor<\/code> ve <code>hataMesaji<\/code> durumlar\u0131 reaktiftir. Yani, <code>urunler.value<\/code> g\u00fcncellendi\u011finde, Vue otomatik olarak <code>v-for<\/code> d\u00f6ng\u00fcs\u00fcn\u00fc yeniden render eder. <code>yukleniyor<\/code> durumu, kullan\u0131c\u0131ya geri bildirim sa\u011flamak i\u00e7in kullan\u0131l\u0131rken, <code>hataMesaji<\/code> olas\u0131 sorunlar\u0131 g\u00f6sterir. Bu, reaktif bir veri ak\u0131\u015f\u0131n\u0131n ilk ad\u0131m\u0131d\u0131r: ham veriyi al\u0131p bile\u015fenin reaktif durumuna aktarmak.<\/p>\n<p>WebSocket gibi s\u00fcrekli veri ak\u0131\u015f\u0131 sa\u011flayan kaynaklar i\u00e7in, ba\u011flant\u0131 kuruldu\u011funda gelen mesajlar\u0131 bir <code>reactive<\/code> diziye ekleyebilir veya belirli bir <code>ref<\/code> de\u011ferini g\u00fcncelleyebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ WebSocket \u00f6rne\u011fi\nimport { ref, onMounted, onUnmounted } from 'vue';\n\nconst anlikVeri = ref([]);\nlet ws = null;\n\nonMounted(() => {\n  ws = new WebSocket('ws:\/\/localhost:8080\/veri');\n  ws.onmessage = (event) => {\n    anlikVeri.value.push(JSON.parse(event.data));\n  };\n  ws.onopen = () => console.log('WebSocket ba\u011flant\u0131s\u0131 a\u00e7\u0131ld\u0131.');\n  ws.onclose = () => console.log('WebSocket ba\u011flant\u0131s\u0131 kapand\u0131.');\n  ws.onerror = (error) => console.error('WebSocket hatas\u0131:', error);\n});\n\nonUnmounted(() => {\n  if (ws) {\n    ws.close();\n  }\n});<\/code><\/pre>\n<p>Bu sayede, <code>anlikVeri<\/code> dizisine yeni bir \u00f6\u011fe eklendi\u011finde, bu veriyi kullanan t\u00fcm bile\u015fenler otomatik olarak g\u00fcncellenir.<\/p>\n<h3>Veri D\u00f6n\u00fc\u015f\u00fcm\u00fc ve \u0130\u015fleme<\/h3>\n<p>Ham veriyi ald\u0131ktan sonra, genellikle bu veriyi kullan\u0131c\u0131 aray\u00fcz\u00fcnde g\u00f6sterilmeden \u00f6nce d\u00f6n\u00fc\u015ft\u00fcrmek, filtrelemek, s\u0131ralamak veya ba\u015fka \u015fekillerde i\u015flemek gerekir. Vue&#8217;da bu t\u00fcr i\u015flemler i\u00e7in <code>computed<\/code> \u00f6zellikleri ve <code>watch<\/code> fonksiyonlar\u0131 idealdir.<\/p>\n<p><code>computed<\/code> \u00f6zellikleri, mevcut reaktif duruma dayal\u0131 olarak yeni bir reaktif durum t\u00fcretmek i\u00e7in kullan\u0131l\u0131r. Performans avantajlar\u0131 sunar \u00e7\u00fcnk\u00fc ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015fmedik\u00e7e tekrar hesaplanmazlar ve \u00f6nbelle\u011fe al\u0131n\u0131rlar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/components\/FiltrelenmisUrunler.vue\n<template>\n  <div>\n    <input type=\"text\" v-model=\"aramaMetni\" placeholder=\"\u00dcr\u00fcn ara...\" \/>\n    <h3>Filtrelenmi\u015f \u00dcr\u00fcnler<\/h3>\n    <ul>\n      <li v-for=\"urun in filtrelenmisUrunler\" :key=\"urun.id\">\n        {{ urun.ad }} ({{ urun.kategori }}) - {{ urun.fiyat }} TL\n      <\/li>\n    <\/ul>\n  <\/div>\n<\/template>\n\n<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport axios from 'axios';\n\nconst urunler = ref([]);\nconst aramaMetni = ref('');\n\n\/\/ API'den \u00fcr\u00fcnleri \u00e7ekti\u011fimizi varsayal\u0131m\nonMounted(async () => {\n  const response = await axios.get('https:\/\/api.example.com\/urunler');\n  urunler.value = response.data;\n});\n\n\/\/ Arama metnine g\u00f6re \u00fcr\u00fcnleri filtreleyen computed \u00f6zellik\nconst filtrelenmisUrunler = computed(() => {\n  if (!aramaMetni.value) {\n    return urunler.value;\n  }\n  return urunler.value.filter(urun =>\n    urun.ad.toLowerCase().includes(aramaMetni.value.toLowerCase()) ||\n    urun.kategori.toLowerCase().includes(aramaMetni.value.toLowerCase())\n  );\n});\n<\/script><\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>aramaMetni<\/code> de\u011fi\u015fti\u011finde, <code>filtrelenmisUrunler<\/code> computed \u00f6zelli\u011fi otomatik olarak yeniden hesaplan\u0131r ve UI g\u00fcncellenir. Bu, reaktif veri ak\u0131\u015f\u0131n\u0131n en g\u00fc\u00e7l\u00fc y\u00f6nlerinden biridir.<\/p>\n<p><code>watch<\/code> fonksiyonlar\u0131 ise, bir reaktif durum de\u011fi\u015fti\u011finde belirli bir yan etkiyi tetiklemek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir arama kutusuna yazarken her tu\u015f vuru\u015funda API \u00e7a\u011fr\u0131s\u0131 yapmak yerine, belirli bir gecikme sonras\u0131 \u00e7a\u011fr\u0131 yapmak i\u00e7in &#8220;debouncing&#8221; (gecikmeli i\u015flem) uygulayabilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/components\/DebouncedSearch.vue\n<template>\n  <div>\n    <input type=\"text\" v-model=\"aramaSorgusu\" placeholder=\"API'den ara...\" \/>\n    <p v-if=\"aramaSonucu\">Sonu\u00e7: {{ aramaSonucu }}<\/p>\n  <\/div>\n<\/template>\n\n<script setup>\nimport { ref, watch } from 'vue';\nimport axios from 'axios';\n\nconst aramaSorgusu = ref('');\nconst aramaSonucu = ref(null);\nlet timeoutId = null;\n\nwatch(aramaSorgusu, (yeniSorgu) => {\n  \/\/ \u00d6nceki zamanlay\u0131c\u0131y\u0131 temizle\n  clearTimeout(timeoutId);\n\n  \/\/ E\u011fer sorgu bo\u015fsa, sonucu temizle ve API \u00e7a\u011fr\u0131s\u0131 yapma\n  if (!yeniSorgu.trim()) {\n    aramaSonucu.value = null;\n    return;\n  }\n\n  \/\/ 500ms sonra API \u00e7a\u011fr\u0131s\u0131 yap\n  timeoutId = setTimeout(async () => {\n    try {\n      const response = await axios.get(<code>https:\/\/api.example.com\/search?q=${yeniSorgu}<\/code>);\n      aramaSonucu.value = response.data.results[0]?.title || 'Sonu\u00e7 bulunamad\u0131.';\n    } catch (error) {\n      console.error('Arama hatas\u0131:', error);\n      aramaSonucu.value = 'Arama s\u0131ras\u0131nda bir hata olu\u015ftu.';\n    }\n  }, 500);\n});\n<\/script><\/code><\/pre>\n<p>Bu <code>watch<\/code> \u00f6rne\u011fi, kullan\u0131c\u0131n\u0131n yazmay\u0131 bitirmesini bekleyerek gereksiz API \u00e7a\u011fr\u0131lar\u0131n\u0131 \u00f6nler, bu da hem sunucu y\u00fck\u00fcn\u00fc azalt\u0131r hem de kullan\u0131c\u0131 deneyimini iyile\u015ftirir.<\/p>\n<h3>Ak\u0131\u015f\u0131 Orkestrasyonu: Vuex\/Pinia ile Durum Y\u00f6netimi<\/h3>\n<p>Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e ve veri ak\u0131\u015flar\u0131n\u0131z karma\u015f\u0131kla\u015ft\u0131k\u00e7a, bile\u015fenler aras\u0131nda veri payla\u015f\u0131m\u0131 ve y\u00f6netimi zorla\u015fabilir. Bu noktada, merkezi bir durum y\u00f6netimi k\u00fct\u00fcphanesi devreye girer. Vue.js ekosisteminde Pinia (Vue 3 i\u00e7in \u00f6nerilen) ve Vuex (hem Vue 2 hem de Vue 3 ile uyumlu, ancak Vue 3&#8217;te Pinia daha modern kabul edilir) bu ihtiyac\u0131 kar\u015f\u0131lar.<\/p>\n<p>Pinia, Vuex&#8217;e g\u00f6re daha hafif, daha basit bir API&#8217;ye sahip ve TypeScript ile daha iyi entegrasyon sunar. Reaktif veri ak\u0131\u015f\u0131n\u0131z\u0131 merkezi bir \u015fekilde y\u00f6netmek, uygulaman\u0131z\u0131n \u00f6l\u00e7eklenebilirli\u011fini ve bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>Bir Pinia ma\u011fazas\u0131 (store) tipik olarak \u015funlar\u0131 i\u00e7erir:<br \/>\n*   <code>state<\/code>: Uygulaman\u0131z\u0131n temel reaktif verisi.<br \/>\n*   <code>getters<\/code>: State&#8217;ten t\u00fcretilmi\u015f reaktif veriler (Vue&#8217;daki computed \u00f6zelliklerine benzer).<br \/>\n*   <code>actions<\/code>: State&#8217;i de\u011fi\u015ftiren asenkron veya senkron i\u015flemler (API \u00e7a\u011fr\u0131lar\u0131, veri i\u015fleme vb.).<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/stores\/urunStore.js (Pinia store \u00f6rne\u011fi)\nimport { defineStore } from 'pinia';\nimport axios from 'axios';\n\nexport const useUrunStore = defineStore('urunler', {\n  state: () => ({\n    urunler: [],\n    yukleniyor: false,\n    hata: null,\n    aramaMetni: '',\n  }),\n  getters: {\n    \/\/ Filtrelenmi\u015f \u00fcr\u00fcnleri d\u00f6nd\u00fcren getter\n    filtrelenmisUrunler: (state) => {\n      if (!state.aramaMetni) {\n        return state.urunler;\n      }\n      return state.urunler.filter(urun =>\n        urun.ad.toLowerCase().includes(state.aramaMetni.toLowerCase()) ||\n        urun.kategori.toLowerCase().includes(state.aramaMetni.toLowerCase())\n      );\n    },\n    \/\/ Toplam \u00fcr\u00fcn say\u0131s\u0131n\u0131 d\u00f6nd\u00fcren getter\n    toplamUrunSayisi: (state) => state.urunler.length,\n  },\n  actions: {\n    \/\/ API'den \u00fcr\u00fcnleri \u00e7eken asenkron action\n    async urunleriGetir() {\n      this.yukleniyor = true;\n      this.hata = null;\n      try {\n        const response = await axios.get('https:\/\/api.example.com\/urunler');\n        this.urunler = response.data;\n      } catch (error) {\n        this.hata = '\u00dcr\u00fcnler y\u00fcklenirken bir hata olu\u015ftu.';\n        console.error('\u00dcr\u00fcnleri \u00e7ekerken hata:', error);\n      } finally {\n        this.yukleniyor = false;\n      }\n    },\n    \/\/ Arama metnini g\u00fcncelleyen action\n    setAramaMetni(metin) {\n      this.aramaMetni = metin;\n    },\n  },\n});<\/code><\/pre>\n<p>Bir bile\u015fende bu ma\u011fazay\u0131 kullanmak:<\/p>\n<pre><code class=\"language-javascript\">\/\/ src\/components\/UrunlerView.vue\n<template>\n  <div>\n    <input type=\"text\" :value=\"urunStore.aramaMetni\" @input=\"e => urunStore.setAramaMetni(e.target.value)\" placeholder=\"\u00dcr\u00fcn ara...\" \/>\n    <p v-if=\"urunStore.yukleniyor\">\u00dcr\u00fcnler y\u00fckleniyor...<\/p>\n    <p v-if=\"urunStore.hata\">{{ urunStore.hata }}<\/p>\n    <h3>\u00dcr\u00fcn Listesi (Toplam: {{ urunStore.toplamUrunSayisi }})<\/h3>\n    <ul>\n      <li v-for=\"urun in urunStore.filtrelenmisUrunler\" :key=\"urun.id\">\n        {{ urun.ad }} - {{ urun.fiyat }} TL\n      <\/li>\n    <\/ul>\n  <\/div>\n<\/template>\n\n<script setup>\nimport { onMounted } from 'vue';\nimport { useUrunStore } from '..\/stores\/urunStore';\n\nconst urunStore = useUrunStore();\n\nonMounted(() => {\n  urunStore.urunleriGetir();\n});\n<\/script><\/code><\/pre>\n<p>Bu yap\u0131, veri \u00e7ekme, i\u015fleme ve durum g\u00fcncellemelerini tek bir merkezi yerden y\u00f6netmenizi sa\u011flar. <code>urunStore.urunler<\/code> veya <code>urunStore.aramaMetni<\/code> de\u011fi\u015fti\u011finde, <code>urunStore.filtrelenmisUrunler<\/code> getter&#8217;\u0131 otomatik olarak yeniden hesaplan\u0131r ve bu getter&#8217;\u0131 kullanan t\u00fcm bile\u015fenler g\u00fcncellenir. Bu, karma\u015f\u0131k ve \u00e7ok bile\u015fenli uygulamalarda veri ak\u0131\u015f\u0131n\u0131n \u015feffafl\u0131\u011f\u0131n\u0131 ve y\u00f6netilebilirli\u011fini art\u0131r\u0131r.<\/p>\n<h3>Hata Y\u00f6netimi, Y\u00fckleme Durumlar\u0131 ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Sa\u011flam bir reaktif veri ak\u0131\u015f\u0131 olu\u015fturman\u0131n \u00f6nemli bir par\u00e7as\u0131 da hata y\u00f6netimi, kullan\u0131c\u0131ya geri bildirim sa\u011flama ve performans\u0131 optimize etmektir.<\/p>\n<h4>Hata Y\u00f6netimi<\/h4>\n<p>Asenkron i\u015flemler (API \u00e7a\u011fr\u0131lar\u0131 gibi) her zaman ba\u015far\u0131s\u0131z olabilir. <code>try-catch<\/code> bloklar\u0131, bu hatalar\u0131 yakalamak ve kullan\u0131c\u0131ya anlaml\u0131 geri bildirim sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir. Yukar\u0131daki \u00f6rneklerde <code>hataMesaji<\/code> veya <code>hata<\/code> durumlar\u0131n\u0131 kullanarak bu durumu ele ald\u0131k. Hatalar\u0131 yakalay\u0131p kullan\u0131c\u0131ya g\u00f6stermek, uygulaman\u0131z\u0131n daha dayan\u0131kl\u0131 olmas\u0131n\u0131 sa\u011flar. Global hata yakalay\u0131c\u0131lar (<code>app.config.errorHandler<\/code>) da uygulaman\u0131zdaki beklenmedik hatalar\u0131 loglamak i\u00e7in kullan\u0131labilir.<\/p>\n<h4>Y\u00fckleme Durumlar\u0131<\/h4>\n<p>Veri \u00e7ekme i\u015flemleri zaman alabilir. Kullan\u0131c\u0131ya bu s\u00fcre\u00e7te bir geri bildirim sa\u011flamak (\u00f6rne\u011fin, bir y\u00fckleme g\u00f6stergesi veya &#8220;Y\u00fckleniyor&#8230;&#8221; mesaj\u0131) kullan\u0131c\u0131 deneyimini iyile\u015ftirir. <code>yukleniyor<\/code> gibi bir reaktif durum kullanarak bu durumu kolayca y\u00f6netebilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \u00d6rnek: Loading durumunu g\u00f6steren bir bile\u015fen\n<template>\n  <div v-if=\"yukleniyor\" class=\"loading-spinner\">\n    <div class=\"spinner\"><\/div>\n    <p>Veriler y\u00fckleniyor...<\/p>\n  <\/div>\n<\/template><\/code><\/pre>\n<h4>Performans \u0130pu\u00e7lar\u0131<\/h4>\n<p>1.  <strong>Debouncing\/Throttling:<\/strong> \u00d6zellikle arama kutular\u0131 gibi s\u0131k tetiklenen olaylar i\u00e7in (yukar\u0131daki <code>watch<\/code> \u00f6rne\u011finde g\u00f6sterildi\u011fi gibi) <code>debouncing<\/code> veya <code>throttling<\/code> kullanarak gereksiz API \u00e7a\u011fr\u0131lar\u0131n\u0131 veya pahal\u0131 hesaplamalar\u0131 azalt\u0131n.<br \/>\n2.  <strong>Computed \u00d6zellikleri Kullan\u0131n:<\/strong> Veri d\u00f6n\u00fc\u015f\u00fcmleri ve t\u00fcretilmi\u015f durumlar i\u00e7in <code>computed<\/code> kullanmak, Vue&#8217;nun \u00f6nbellekleme mekanizmas\u0131ndan faydalanman\u0131z\u0131 sa\u011flar. Ayn\u0131 veri defalarca istendi\u011finde tekrar hesaplanmaz.<br \/>\n3.  <strong>B\u00fcy\u00fck Listeler \u0130\u00e7in Sanal Kayd\u0131rma (Virtual Scrolling):<\/strong> Binlerce \u00f6\u011feyi i\u00e7eren listelerle \u00e7al\u0131\u015f\u0131rken, t\u00fcm \u00f6\u011feleri ayn\u0131 anda DOM&#8217;a render etmek performans\u0131 d\u00fc\u015f\u00fcrebilir. Vue Virtual Scroller veya TanStack Virtual gibi k\u00fct\u00fcphaneler, yaln\u0131zca g\u00f6r\u00fcnen \u00f6\u011feleri render ederek performans\u0131 art\u0131r\u0131r.<br \/>\n4.  <strong>Gereksiz Reaktiviteden Ka\u00e7\u0131n\u0131n:<\/strong> T\u00fcm verileri reaktif yapmak her zaman gerekli de\u011fildir. Statik veriler veya sadece bir kez y\u00fcklenip de\u011fi\u015fmeyecek veriler i\u00e7in <code>ref<\/code> veya <code>reactive<\/code> kullanmak yerine basit de\u011fi\u015fkenler kullanmak haf\u0131za ve performans a\u00e7\u0131s\u0131ndan daha verimli olabilir.<br \/>\n5.  <strong>API Yan\u0131tlar\u0131n\u0131 \u00d6nbelle\u011fe Al\u0131n:<\/strong> S\u0131k\u00e7a istenen ancak nadiren de\u011fi\u015fen veriler i\u00e7in istemci taraf\u0131nda veya sunucu taraf\u0131nda \u00f6nbellekleme stratejileri uygulay\u0131n. <code>vue-query<\/code> veya <code>swr<\/code> gibi k\u00fct\u00fcphaneler, veri \u00e7ekme, \u00f6nbellekleme ve g\u00fcncellemeyi y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar sunar.<br \/>\n6.  <strong>Key Kullan\u0131m\u0131:<\/strong> <code>v-for<\/code> d\u00f6ng\u00fclerinde <code>key<\/code> \u00f6zelli\u011fini her zaman benzersiz de\u011ferlerle kullan\u0131n. Bu, Vue&#8217;nun DOM&#8217;u daha verimli bir \u015fekilde g\u00fcncellemesine yard\u0131mc\u0131 olur.<\/p>\n<p>Bu pratik ipu\u00e7lar\u0131, uygulaman\u0131z\u0131n reaktif veri ak\u0131\u015f\u0131n\u0131n sadece do\u011fru \u00e7al\u0131\u015fmas\u0131n\u0131 de\u011fil, ayn\u0131 zamanda h\u0131zl\u0131 ve duyarl\u0131 olmas\u0131n\u0131 da sa\u011flayacakt\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Vue.js, g\u00fc\u00e7l\u00fc reaktiflik sistemi ve bile\u015fen tabanl\u0131 mimarisi sayesinde dinamik ve karma\u015f\u0131k veri ak\u0131\u015flar\u0131n\u0131 y\u00f6netmek i\u00e7in ideal bir platformdur. <code>ref<\/code>, <code>reactive<\/code>, <code>computed<\/code> ve <code>watch<\/code> gibi temel API&#8217;leri kullanarak verileri reaktif hale getirebilir, d\u00f6n\u00fc\u015ft\u00fcrebilir ve yan etkileri y\u00f6netebilirsiniz. Pinia gibi durum y\u00f6netimi k\u00fct\u00fcphaneleriyle bu ak\u0131\u015f\u0131 merkezi bir \u015fekilde orkestra ederek uygulaman\u0131z\u0131n \u00f6l\u00e7eklenebilirli\u011fini ve bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131rs\u0131n\u0131z. Hata y\u00f6netimi, y\u00fckleme durumlar\u0131 ve performans optimizasyonlar\u0131n\u0131 da g\u00f6z \u00f6n\u00fcnde bulundurarak, kullan\u0131c\u0131lar\u0131n\u0131za sorunsuz ve h\u0131zl\u0131 bir deneyim sunan sa\u011flam reaktif veri ak\u0131\u015flar\u0131 olu\u015fturabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>S1: Vue 3&#8217;te <code>ref<\/code> ve <code>reactive<\/code> aras\u0131ndaki temel fark nedir?<\/strong><br \/>\n<strong>C1:<\/strong> <code>ref<\/code>, temel de\u011ferleri (string, number, boolean) ve nesneleri reaktif hale getirmek i\u00e7in kullan\u0131l\u0131r ve de\u011fere <code>.value<\/code> ile eri\u015filir. <code>reactive<\/code> ise yaln\u0131zca nesneleri (object, array) reaktif hale getirir ve de\u011ferlere do\u011frudan nesne \u00f6zelli\u011fi gibi eri\u015filir. Genel olarak, basit de\u011ferler i\u00e7in <code>ref<\/code>, karma\u015f\u0131k nesneler i\u00e7in <code>reactive<\/code> tercih edilir, ancak <code>ref<\/code> ile de nesneler reaktif hale getirilebilir.<\/p>\n<p><strong>S2: Ne zaman <code>computed<\/code> bir \u00f6zellik kullanmal\u0131y\u0131m, ne zaman <code>watch<\/code> kullanmal\u0131y\u0131m?<\/strong><br \/>\n<strong>C2:<\/strong> <code>computed<\/code> bir \u00f6zellik, mevcut reaktif durumdan yeni bir reaktif durum t\u00fcretmek istedi\u011finizde kullan\u0131l\u0131r. Ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015fmedik\u00e7e yeniden hesaplanmaz ve \u00f6nbelle\u011fe al\u0131n\u0131r. <code>watch<\/code> ise, bir veya daha fazla reaktif durum de\u011fi\u015fti\u011finde belirli bir yan etkiyi (\u00f6rne\u011fin, bir API \u00e7a\u011fr\u0131s\u0131, DOM manip\u00fclasyonu, yerel depolamaya kaydetme) tetiklemek istedi\u011finizde kullan\u0131l\u0131r.<\/p>\n<p><strong>S3: Vuex yerine Pinia kullanman\u0131n avantajlar\u0131 nelerdir?<\/strong><br \/>\n<strong>C3:<\/strong> Pinia, Vue 3 i\u00e7in daha hafif, daha basit bir API sunar ve TypeScript ile daha iyi entegrasyona sahiptir. Mod\u00fcl kavram\u0131 yerine daha do\u011fal bir &#8220;store&#8221; yap\u0131s\u0131na sahiptir ve daha az boilerplate kodu gerektirir. Vuex&#8217;in aksine, do\u011frudan <code>state<\/code>&#8216;i de\u011fi\u015ftirebilirsiniz (mutation&#8217;lara gerek kalmaz, ancak bu yine de bir action i\u00e7inde yap\u0131lmal\u0131d\u0131r).<\/p>\n<p><strong>S4: B\u00fcy\u00fck veri k\u00fcmeleriyle \u00e7al\u0131\u015f\u0131rken performans\u0131 nas\u0131l optimize edebilirim?<\/strong><br \/>\n<strong>C4:<\/strong> B\u00fcy\u00fck veri k\u00fcmeleri i\u00e7in sanal kayd\u0131rma (virtual scrolling) k\u00fct\u00fcphanelerini kullanmak, yaln\u0131zca g\u00f6r\u00fcnen \u00f6\u011felerin DOM&#8217;a render edilmesini sa\u011flayarak performans\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Ayr\u0131ca, <code>computed<\/code> \u00f6zelliklerini kullanarak veri d\u00f6n\u00fc\u015f\u00fcmlerini \u00f6nbelle\u011fe almak, <code>debouncing<\/code> veya <code>throttling<\/code> ile gereksiz i\u015flemleri azaltmak ve API yan\u0131tlar\u0131n\u0131 \u00f6nbelle\u011fe almak da \u00f6nemlidir.<\/p>\n<p><strong>S5: Reaktif veri ak\u0131\u015f\u0131nda hatalar\u0131 nas\u0131l ele almal\u0131y\u0131m?<\/strong><br \/>\n<strong>C5:<\/strong> Asenkron veri \u00e7ekme i\u015flemlerini <code>try-catch<\/code> bloklar\u0131 i\u00e7ine alarak hatalar\u0131 yakalay\u0131n. Yakalanan hatalar\u0131 kullan\u0131c\u0131ya g\u00f6stermek i\u00e7in reaktif bir hata durumu (<code>hataMesaji<\/code> veya <code>error<\/code>) kullan\u0131n. Uygulama genelindeki beklenmedik hatalar i\u00e7in Vue&#8217;nun global hata yakalay\u0131c\u0131s\u0131n\u0131 (<code>app.config.errorHandler<\/code>) yap\u0131land\u0131rabilirsiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma\nModern web uygulamalar\u0131, s\u00fcrekli de\u011fi\u015fen verilerle dinamik bir \u015fekilde etkile\u015fim kurma ihtiyac\u0131","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1402],"tags":[],"class_list":{"0":"post-38846","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-vue","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma Modern web uygulamalar\u0131, s\u00fcrekli de\u011fi\u015fen verilerle dinamik bir \u015fekilde etkile\u015fim kurma ihtiyac\u0131\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-08T18:41:30+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma\",\"datePublished\":\"2026-02-08T18:41:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/\"},\"wordCount\":1981,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Vue\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/\",\"name\":\"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-08T18:41:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma","og_description":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma Modern web uygulamalar\u0131, s\u00fcrekli de\u011fi\u015fen verilerle dinamik bir \u015fekilde etkile\u015fim kurma ihtiyac\u0131","og_url":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-08T18:41:30+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma","datePublished":"2026-02-08T18:41:30+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/"},"wordCount":1981,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Vue"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/","name":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-08T18:41:30+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-ile-reaktif-veri-akisi-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vue.js ile Reaktif Veri Ak\u0131\u015f\u0131 Olu\u015fturma"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38846"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38846\/revisions"}],"predecessor-version":[{"id":38847,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38846\/revisions\/38847"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}