{"id":34507,"date":"2025-11-18T00:40:57","date_gmt":"2025-11-17T21:40:57","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=34507"},"modified":"2025-11-18T00:40:57","modified_gmt":"2025-11-17T21:40:57","slug":"vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/","title":{"rendered":"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme"},"content":{"rendered":"<p><body><\/p>\n<h2>Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme<\/h2>\n<h2>Giri\u015f: Vue.js Uygulamalar\u0131nda Durum Y\u00f6netiminin \u00d6nemi<\/h2>\n<p>Modern web uygulamalar\u0131, \u00f6zellikle tek sayfa uygulamalar\u0131 (SPA&#8217;lar), giderek daha karma\u015f\u0131k hale gelmektedir. Bu uygulamalar, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc olu\u015fturan y\u00fczlerce hatta binlerce bile\u015fenden olu\u015fabilir. Bu bile\u015fenler aras\u0131nda veri payla\u015f\u0131m\u0131, ileti\u015fim ve uygulaman\u0131n genel &#8220;durumunu&#8221; (state) tutarl\u0131 bir \u015fekilde y\u00f6netmek, geli\u015ftiriciler i\u00e7in \u00f6nemli bir zorluk te\u015fkil eder. Durum y\u00f6netimi, uygulaman\u0131n herhangi bir an\u0131ndaki verilerini (\u00f6rne\u011fin, kullan\u0131c\u0131 bilgileri, sepet i\u00e7eri\u011fi, tema ayarlar\u0131, API&#8217;den \u00e7ekilen veriler vb.) merkezi ve \u00f6ng\u00f6r\u00fclebilir bir \u015fekilde depolama, g\u00fcncelleme ve eri\u015fme s\u00fcrecidir.<\/p>\n<p>Vue.js gibi progresif bir JavaScript \u00e7er\u00e7evesiyle geli\u015ftirme yaparken, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalarda props ve emit olaylar\u0131 gibi yerle\u015fik mekanizmalar genellikle yeterli olur. Ancak uygulama b\u00fcy\u00fcd\u00fck\u00e7e, bile\u015fen hiyerar\u015fisi derinle\u015ftik\u00e7e ve birden fazla bile\u015fenin ayn\u0131 duruma eri\u015fmesi veya durumu de\u011fi\u015ftirmesi gerekti\u011finde bu yerle\u015fik \u00e7\u00f6z\u00fcmler yetersiz kalmaya ba\u015flar. &#8220;Prop drilling&#8221; (veriyi derinlemesine i\u00e7 i\u00e7e ge\u00e7mi\u015f bile\u015fenlere props arac\u0131l\u0131\u011f\u0131yla aktarma) ve &#8220;event hell&#8221; (olaylar\u0131n karma\u015f\u0131k bir \u015fekilde yukar\u0131ya do\u011fru yay\u0131lmas\u0131) gibi sorunlar ortaya \u00e7\u0131kar. Bu durum, kodun okunabilirli\u011fini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve hata ay\u0131klama s\u00fcrecini olumsuz etkiler. \u0130\u015fte bu noktada, Vue.js ekosisteminde merkezi durum y\u00f6netimi k\u00fct\u00fcphaneleri devreye girer. Bu makalede, Vue.js uygulamalar\u0131nda durum y\u00f6netimi i\u00e7in kullan\u0131lan farkl\u0131 yakla\u015f\u0131mlar\u0131, \u00f6zellikle Vuex ve Pinia gibi pop\u00fcler k\u00fct\u00fcphaneleri derinlemesine inceleyecek, avantajlar\u0131n\u0131, dezavantajlar\u0131n\u0131 ve hangi senaryolarda tercih edilmeleri gerekti\u011fini tart\u0131\u015faca\u011f\u0131z.<\/p>\n<h2>Vue.js&#8217;te Temel Durum Y\u00f6netimi Yakla\u015f\u0131mlar\u0131<\/h2>\n<p>Vue.js, bir uygulaman\u0131n durumunu y\u00f6netmek i\u00e7in \u00e7e\u015fitli yerle\u015fik mekanizmalar sunar. Bu mekanizmalar, uygulaman\u0131n karma\u015f\u0131kl\u0131\u011f\u0131na ve bile\u015fenler aras\u0131 ileti\u015fim ihtiya\u00e7lar\u0131na g\u00f6re farkl\u0131 senaryolarda kullan\u0131labilir.<\/p>\n<h3>Props ve Emit Olaylar\u0131<\/h3>\n<p>Vue.js&#8217;in en temel ve yayg\u0131n durum y\u00f6netimi mekanizmas\u0131, bile\u015fenler aras\u0131nda veri aktar\u0131m\u0131n\u0131 sa\u011flayan props (\u00f6zellikler) ve olaylard\u0131r. Props, \u00fcst bile\u015fenden alt bile\u015fene do\u011fru tek y\u00f6nl\u00fc bir veri ak\u0131\u015f\u0131 sa\u011flar. Alt bile\u015fen, kendisine iletilen prop de\u011ferlerini okuyabilir ancak do\u011frudan de\u011fi\u015ftiremez. Bir alt bile\u015fenin \u00fcst bile\u015fendeki bir durumu de\u011fi\u015ftirmesi gerekti\u011finde ise, <code>emit<\/code> olaylar\u0131 kullan\u0131l\u0131r. Alt bile\u015fen bir olay yayar ve bu olay\u0131 dinleyen \u00fcst bile\u015fen, kendi durumunu g\u00fcncelleyebilir. Bu model, &#8220;tek y\u00f6nl\u00fc veri ak\u0131\u015f\u0131&#8221; prensibini destekleyerek uygulaman\u0131n durumunun daha \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong> Basit ve anla\u015f\u0131lmas\u0131 kolayd\u0131r, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalar i\u00e7in yeterlidir, Vue&#8217;nin temel prensiplerine uygundur.<br \/>\n<strong>Dezavantajlar\u0131:<\/strong> Bile\u015fen hiyerar\u015fisi derinle\u015ftik\u00e7e &#8220;prop drilling&#8221; sorununa yol a\u00e7ar (verinin birden fazla ara bile\u015fen \u00fczerinden ge\u00e7irilmesi), karma\u015f\u0131k ileti\u015fim senaryolar\u0131nda olaylar\u0131n y\u00f6netimi zorla\u015f\u0131r, global duruma eri\u015fim sa\u011flamaz.<\/p>\n<h3>Provide\/Inject API&#8217;si<\/h3>\n<p>Vue 3 ile birlikte daha da geli\u015ftirilen <code>provide<\/code> ve <code>inject<\/code> API&#8217;si, &#8220;prop drilling&#8221; sorununa alternatif bir \u00e7\u00f6z\u00fcm sunar. Bir \u00fcst bile\u015fen, <code>provide<\/code> kullanarak bir de\u011feri veya reaktif bir nesneyi t\u00fcm alt bile\u015fenlerine (ne kadar derin olurlarsa olsunlar) sa\u011flayabilir. Daha sonra herhangi bir alt bile\u015fen, <code>inject<\/code> kullanarak bu sa\u011flanan de\u011feri en yak\u0131n \u00fcst bile\u015fenden alabilir. Bu mekanizma, bile\u015fen a\u011fac\u0131n\u0131n herhangi bir yerindeki bir bile\u015fenin, \u00e7ok daha yukar\u0131daki bir \u00fcst bile\u015fen taraf\u0131ndan sa\u011flanan duruma eri\u015fmesini sa\u011flar. \u00d6zellikle Composition API ile birlikte reaktif de\u011ferler veya hesaplanm\u0131\u015f \u00f6zellikler sa\u011flamak, bu API&#8217;yi daha da g\u00fc\u00e7l\u00fc k\u0131lar.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong> &#8220;Prop drilling&#8221; sorununu ortadan kald\u0131r\u0131r, derinlemesine i\u00e7 i\u00e7e ge\u00e7mi\u015f bile\u015fenler aras\u0131nda veri payla\u015f\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r, global veya yar\u0131-global durumlar i\u00e7in kullan\u0131labilir.<br \/>\n<strong>Dezavantajlar\u0131:<\/strong> Hangi bile\u015fenin hangi de\u011feri sa\u011flad\u0131\u011f\u0131n\u0131 ve hangisinin ald\u0131\u011f\u0131n\u0131 takip etmek zorla\u015fabilir (\u00f6zellikle b\u00fcy\u00fck uygulamalarda), DevTools entegrasyonu s\u0131n\u0131rl\u0131d\u0131r, merkezi bir durum deposu sa\u011flamaz, daha karma\u015f\u0131k senaryolar i\u00e7in yeterli olmayabilir.<\/p>\n<h3>Reaktif Kompozisyonlar (Custom Composables)<\/h3>\n<p>Vue 3&#8217;\u00fcn Composition API&#8217;si, reaktif mant\u0131\u011f\u0131 yeniden kullan\u0131labilir fonksiyonlar halinde soyutlama imkan\u0131 sunar. Bu &#8220;composables&#8221; olarak adland\u0131r\u0131lan fonksiyonlar, <code>ref<\/code>, <code>reactive<\/code>, <code>computed<\/code> gibi reaktivite API&#8217;lerini kullanarak kendi i\u00e7 durumlar\u0131n\u0131 y\u00f6netebilir ve bu durumu bile\u015fenler aras\u0131nda payla\u015fabilir. \u00d6rne\u011fin, bir <code>useCounter<\/code> composable&#8217;\u0131, bir say\u0131c\u0131 de\u011ferini ve bunu art\u0131rma\/azaltma fonksiyonlar\u0131n\u0131 i\u00e7erebilir. Bu composable, farkl\u0131 bile\u015fenlerde tekrar tekrar kullan\u0131labilir ve her kullan\u0131m kendi ba\u011f\u0131ms\u0131z durumuna sahip olabilir. Ancak, global bir durumu y\u00f6netmek i\u00e7in de <code>createGlobalState<\/code> (VueUse gibi k\u00fct\u00fcphanelerle) veya basit bir <code>reactive<\/code> nesnesini d\u0131\u015fa aktararak kullan\u0131labilir.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong> Kodu daha mod\u00fcler ve yeniden kullan\u0131labilir hale getirir, mant\u0131ksal olarak ilgili kod bloklar\u0131n\u0131 bir arada tutar, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli global durumlar i\u00e7in esnek bir \u00e7\u00f6z\u00fcm sunar.<br \/>\n<strong>Dezavantajlar\u0131:<\/strong> B\u00fcy\u00fck ve karma\u015f\u0131k global durumlar i\u00e7in merkezi bir y\u00f6netim veya DevTools deste\u011fi sunmaz, durum g\u00fcncellemelerinin takibi zorla\u015fabilir, \u00f6l\u00e7eklenebilirlik a\u00e7\u0131s\u0131ndan s\u0131n\u0131rl\u0131 kalabilir.<\/p>\n<h2>Geleneksel \u00c7\u00f6z\u00fcm: Vuex<\/h2>\n<p>Vuex, Vue.js uygulamalar\u0131 i\u00e7in resmi durum y\u00f6netimi k\u00fct\u00fcphanesidir ve Flux mimarisinden esinlenilmi\u015ftir. B\u00fcy\u00fck \u00f6l\u00e7ekli ve karma\u015f\u0131k uygulamalarda bile\u015fenler aras\u0131 durumu merkezi ve \u00f6ng\u00f6r\u00fclebilir bir \u015fekilde y\u00f6netmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Vuex, uygulaman\u0131n t\u00fcm durumunu tek bir depoda (store) tutar ve bu depoya eri\u015fimi ve g\u00fcncellemeleri kat\u0131 kurallarla kontrol eder.<\/p>\n<h3>Vuex Nedir ve Neden Ortaya \u00c7\u0131kt\u0131?<\/h3>\n<p>Vuex, Vue.js&#8217;in pop\u00fclaritesi artt\u0131k\u00e7a ve geli\u015ftirilen uygulamalar b\u00fcy\u00fcd\u00fck\u00e7e ortaya \u00e7\u0131kan durum y\u00f6netimi sorunlar\u0131na bir \u00e7\u00f6z\u00fcm olarak geli\u015ftirilmi\u015ftir. Birden fazla bile\u015fenin ayn\u0131 veriye ba\u011f\u0131ml\u0131 oldu\u011fu veya ayn\u0131 veriyi de\u011fi\u015ftirmesi gerekti\u011fi senaryolarda, Vuex merkezi bir &#8220;ger\u00e7e\u011fin tek kayna\u011f\u0131&#8221; (single source of truth) sa\u011flayarak veri tutars\u0131zl\u0131\u011f\u0131n\u0131 \u00f6nler. Bu merkeziyet, uygulaman\u0131n durumunun her zaman \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 ve hata ay\u0131klaman\u0131n kolayla\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Vuex&#8217;in Temel Kavramlar\u0131 ve Mimarisi<\/h3>\n<p>Vuex, bir dizi temel kavram etraf\u0131nda in\u015fa edilmi\u015ftir:<br \/>\n*   <strong>State:<\/strong> Uygulaman\u0131n t\u00fcm reaktif durumunu bar\u0131nd\u0131ran merkezi nesnedir. Bile\u015fenler bu duruma do\u011frudan eri\u015femez, <code>getters<\/code> arac\u0131l\u0131\u011f\u0131yla okur.<br \/>\n*   <strong>Getters:<\/strong> State&#8217;ten t\u00fcretilmi\u015f durumlar\u0131 (computed properties gibi) sa\u011flayan fonksiyonlard\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131 listesinden sadece aktif kullan\u0131c\u0131lar\u0131 filtrelemek i\u00e7in bir getter kullan\u0131labilir.<br \/>\n*   <strong>Mutations:<\/strong> State&#8217;i de\u011fi\u015ftiren senkron fonksiyonlard\u0131r. Vuex&#8217;te state&#8217;i de\u011fi\u015ftirmenin tek yolu mutation&#8217;lar\u0131 \u00e7a\u011f\u0131rmakt\u0131r. Her mutation bir t\u00fcr (type) ve bir payload (veri) al\u0131r. Bu k\u0131s\u0131tlama, state&#8217;teki her de\u011fi\u015fikli\u011fin izlenebilir ve \u00f6ng\u00f6r\u00fclebilir olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Actions:<\/strong> Asenkron i\u015flemleri (API \u00e7a\u011fr\u0131lar\u0131, zamanlay\u0131c\u0131lar vb.) ger\u00e7ekle\u015ftiren fonksiyonlard\u0131r. Actions, state&#8217;i do\u011frudan de\u011fi\u015ftiremez; bunun yerine mutation&#8217;lar\u0131 \u00e7a\u011f\u0131rarak state&#8217;i g\u00fcncellerler. Actions, birden fazla mutation&#8217;\u0131 s\u0131rayla \u00e7a\u011f\u0131rabilir veya di\u011fer action&#8217;lar\u0131 tetikleyebilir.<br \/>\n*   <strong>Modules:<\/strong> B\u00fcy\u00fck uygulamalarda store&#8217;u daha y\u00f6netilebilir par\u00e7alara b\u00f6lmek i\u00e7in kullan\u0131l\u0131r. Her mod\u00fcl kendi state, getters, mutations ve actions&#8217;a sahip olabilir. Bu, kodun organizasyonunu ve okunabilirli\u011fini art\u0131r\u0131r.<\/p>\n<h3>Vuex ile \u00c7al\u0131\u015fmak: \u00d6rnekler ve En \u0130yi Uygulamalar<\/h3>\n<p>Vuex bir Vue uygulamas\u0131na eklendi\u011finde, <code>store<\/code> nesnesi Vue uygulamas\u0131n\u0131n prototipine eklenir ve t\u00fcm bile\u015fenler <code>this.$store<\/code> arac\u0131l\u0131\u011f\u0131yla eri\u015febilir. Composition API ile <code>useStore<\/code> hook&#8217;u kullan\u0131larak daha modern bir eri\u015fim sa\u011flan\u0131r.<\/p>\n<p><strong>\u00d6rnek Yap\u0131:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ store\/index.js\nimport { createStore } from 'vuex';\n\nexport default createStore({\n  state: {\n    count: 0,\n    user: null\n  },\n  getters: {\n    doubleCount: state => state.count * 2,\n    isAuthenticated: state => !!state.user\n  },\n  mutations: {\n    increment(state) {\n      state.count++;\n    },\n    setUserData(state, payload) {\n      state.user = payload;\n    }\n  },\n  actions: {\n    async fetchUser({ commit }) {\n      const response = await fetch('\/api\/user');\n      const userData = await response.json();\n      commit('setUserData', userData);\n    },\n    incrementAsync({ commit }) {\n      setTimeout(() => {\n        commit('increment');\n      }, 1000);\n    }\n  },\n  modules: {\n    \/\/ auth: authModule,\n    \/\/ products: productsModule\n  }\n});<\/code><\/pre>\n<p>Bile\u015fen i\u00e7inde eri\u015fim:<\/p>\n<pre><code class=\"language-vue\"><template>\n  <div>\n    <p>Count: {{ $store.state.count }}<\/p>\n    <p>Double Count: {{ $store.getters.doubleCount }}<\/p>\n    <button @click=\"increment\">Increment<\/button>\n    <button @click=\"fetchUser\">Fetch User<\/button>\n  <\/div>\n<\/template>\n\n<script>\nimport { useStore } from 'vuex';\nimport { computed } from 'vue';\n\nexport default {\n  setup() {\n    const store = useStore();\n\n    const count = computed(() => store.state.count);\n    const doubleCount = computed(() => store.getters.doubleCount);\n\n    const increment = () => store.commit('increment');\n    const fetchUser = () => store.dispatch('fetchUser');\n\n    return {\n      count,\n      doubleCount,\n      increment,\n      fetchUser\n    };\n  }\n}\n<\/script><\/code><\/pre>\n<p><strong>En \u0130yi Uygulamalar:<\/strong><br \/>\n*   <strong>Mod\u00fcl Kullan\u0131m\u0131:<\/strong> Uygulama b\u00fcy\u00fcd\u00fck\u00e7e store&#8217;u mant\u0131ksal mod\u00fcllere ay\u0131rmak, kodun daha d\u00fczenli ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Sabit T\u00fcrler:<\/strong> Mutation t\u00fcrlerini sabitler (constants) olarak tan\u0131mlamak, yaz\u0131m hatalar\u0131n\u0131 azalt\u0131r ve kodun daha okunabilir olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>DevTools:<\/strong> Vuex, Vue DevTools ile m\u00fckemmel entegrasyona sahiptir. Durum de\u011fi\u015fikliklerini zaman \u00e7izelgesinde izlemek, hata ay\u0131klamay\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Vuex&#8217;in Avantajlar\u0131 ve Dezavantajlar\u0131<\/h3>\n<p><strong>Avantajlar\u0131:<\/strong><br \/>\n*   <strong>Merkezi Durum:<\/strong> Uygulaman\u0131n t\u00fcm durumunu tek bir yerde toplar, &#8220;ger\u00e7e\u011fin tek kayna\u011f\u0131&#8221; prensibini sa\u011flar.<br \/>\n*   <strong>\u00d6ng\u00f6r\u00fclebilirlik:<\/strong> State de\u011fi\u015fiklikleri yaln\u0131zca mutation&#8217;lar arac\u0131l\u0131\u011f\u0131yla yap\u0131ld\u0131\u011f\u0131 i\u00e7in durum ak\u0131\u015f\u0131 daha \u00f6ng\u00f6r\u00fclebilirdir.<br \/>\n*   <strong>Hata Ay\u0131klama:<\/strong> Vue DevTools ile m\u00fckemmel entegrasyonu sayesinde durum de\u011fi\u015fikliklerini zaman \u00e7izelgesinde izlemek ve geri almak m\u00fcmk\u00fcnd\u00fcr (time-travel debugging).<br \/>\n*   <strong>Topluluk Deste\u011fi:<\/strong> Uzun s\u00fcredir var olan ve geni\u015f bir toplulu\u011fa sahip oldu\u011fu i\u00e7in bir\u00e7ok kaynak ve destek bulunur.<br \/>\n*   <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> Mod\u00fcl yap\u0131s\u0131 sayesinde b\u00fcy\u00fck ve karma\u015f\u0131k uygulamalar i\u00e7in uygundur.<\/p>\n<p><strong>Dezavantajlar\u0131:<\/strong><br \/>\n*   <strong>Boilerplate Kodu:<\/strong> \u00d6zellikle k\u00fc\u00e7\u00fck durumlar i\u00e7in bile state, getters, mutations ve actions tan\u0131mlamak, gereksiz fazla kod yazmaya yol a\u00e7abilir.<br \/>\n*   <strong>\u00d6\u011frenme E\u011frisi:<\/strong> Flux mimarisi ve Vuex&#8217;in kat\u0131 kurallar\u0131, yeni ba\u015flayanlar i\u00e7in bir \u00f6\u011frenme e\u011frisi olu\u015fturabilir.<br \/>\n*   <strong>TypeScript Deste\u011fi:<\/strong> Vuex 3&#8217;te TypeScript deste\u011fi biraz karma\u015f\u0131kt\u0131 ve manuel tip tan\u0131mlamalar\u0131 gerektiriyordu. Vuex 4 (Vue 3 i\u00e7in) bu durumu iyile\u015ftirse de hala Pinia kadar do\u011fal de\u011fildir.<br \/>\n*   <strong>Asenkron \u0130\u015flemler:<\/strong> Actions ve mutations aras\u0131ndaki ayr\u0131m, asenkron i\u015flemlerin y\u00f6netimini bazen karma\u015f\u0131kla\u015ft\u0131rabilir.<\/p>\n<h2>Modern \u00c7\u00f6z\u00fcm: Pinia<\/h2>\n<p>Pinia, Vue.js&#8217;in resmi durum y\u00f6netimi k\u00fct\u00fcphanesi Vuex&#8217;in &#8220;gelece\u011fi&#8221; olarak kabul edilen, daha hafif ve modern bir durum y\u00f6netim \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. Vue 3 ve Composition API&#8217;nin g\u00fcc\u00fcnden tam olarak yararlanmak \u00fczere tasarlanm\u0131\u015ft\u0131r. Pinia, Vuex&#8217;in baz\u0131 karma\u015f\u0131kl\u0131klar\u0131n\u0131 gidererek daha basit bir API sunarken, ayn\u0131 zamanda g\u00fc\u00e7l\u00fc tip g\u00fcvenli\u011fi ve geli\u015ftirici deneyimi sa\u011flar.<\/p>\n<h3>Pinia Nedir ve Neden Vuex&#8217;in Yerine Ge\u00e7ti?<\/h3>\n<p>Pinia, Vuex&#8217;in yarat\u0131c\u0131s\u0131 Evan You taraf\u0131ndan da desteklenen ve Vue ekibi taraf\u0131ndan resmi olarak \u00f6nerilen yeni nesil durum y\u00f6netim k\u00fct\u00fcphanesidir. Vuex&#8217;in baz\u0131 tasar\u0131m kararlar\u0131n\u0131n (\u00f6zellikle mutations&#8217;\u0131n zorunlulu\u011fu ve TypeScript ile entegrasyon zorluklar\u0131) modern Vue geli\u015ftirme paradigmas\u0131yla tam uyumlu olmad\u0131\u011f\u0131n\u0131 fark edilmesi \u00fczerine ortaya \u00e7\u0131km\u0131\u015ft\u0131r. Pinia, daha minimalist bir yakla\u015f\u0131mla, Vuex&#8217;in sundu\u011fu t\u00fcm avantajlar\u0131 (merkezi durum, DevTools entegrasyonu) korurken, geli\u015ftiricinin hayat\u0131n\u0131 kolayla\u015ft\u0131rmay\u0131 hedefler.<\/p>\n<h3>Pinia&#8217;n\u0131n Temel Kavramlar\u0131 ve Mimarisi<\/h3>\n<p>Pinia&#8217;da temel yap\u0131 &#8220;store&#8221; olarak adland\u0131r\u0131l\u0131r. Vuex&#8217;teki gibi mod\u00fcllere ayr\u0131lm\u0131\u015f bir yap\u0131 yerine, Pinia&#8217;da her store, kendi ba\u015f\u0131na ba\u011f\u0131ms\u0131z bir mod\u00fcl gibi \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong>Store:<\/strong> Uygulaman\u0131n reaktif durumunu, getter&#8217;lar\u0131n\u0131 ve action&#8217;lar\u0131n\u0131 i\u00e7eren merkezi bir birimdir. Her store benzersiz bir kimli\u011fe sahiptir.<br \/>\n*   <strong>State:<\/strong> Store&#8217;un reaktif veri deposudur. Vuex&#8217;in aksine, Pinia&#8217;da state&#8217;i do\u011frudan de\u011fi\u015ftirmek m\u00fcmk\u00fcnd\u00fcr (ancak genellikle action&#8217;lar arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r).<br \/>\n*   <strong>Getters:<\/strong> State&#8217;ten t\u00fcretilmi\u015f durumlar\u0131 sa\u011flayan fonksiyonlard\u0131r. <code>computed<\/code> \u00f6zelliklerine benzer \u015fekilde \u00e7al\u0131\u015f\u0131rlar ve otomatik olarak \u00f6nbelle\u011fe al\u0131n\u0131rlar.<br \/>\n*   <strong>Actions:<\/strong> State&#8217;i de\u011fi\u015ftiren, asenkron i\u015flemleri y\u00f6neten ve di\u011fer store&#8217;larla etkile\u015fime girebilen metotlard\u0131r. Pinia&#8217;da <code>mutations<\/code> kavram\u0131 yoktur; state de\u011fi\u015fiklikleri do\u011frudan action&#8217;lar i\u00e7inde yap\u0131labilir. Bu, kodun daha yal\u0131n olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Pinia ile \u00c7al\u0131\u015fmak: \u00d6rnekler ve En \u0130yi Uygulamalar<\/h3>\n<p>Pinia&#8217;y\u0131 kullanmak i\u00e7in \u00f6ncelikle <code>defineStore<\/code> fonksiyonu ile bir store tan\u0131mlan\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ stores\/counter.js\nimport { defineStore } from 'pinia';\n\nexport const useCounterStore = defineStore('counter', {\n  state: () => ({\n    count: 0,\n    name: 'Eduardo'\n  }),\n  getters: {\n    doubleCount: (state) => state.count * 2,\n    \/\/ Getter'lar di\u011fer getter'lara eri\u015febilir\n    doubleCountPlusOne() {\n      return this.doubleCount + 1;\n    }\n  },\n  actions: {\n    increment() {\n      this.count++;\n    },\n    async fetchData() {\n      \/\/ Asenkron i\u015flemler do\u011frudan burada yap\u0131labilir\n      const response = await fetch('\/api\/data');\n      const data = await response.json();\n      \/\/ State'i do\u011frudan de\u011fi\u015ftirebiliriz\n      this.count = data.someValue;\n    }\n  }\n});<\/code><\/pre>\n<p>Bile\u015fen i\u00e7inde kullan\u0131m\u0131:<\/p>\n<pre><code class=\"language-vue\"><template>\n  <div>\n    <p>Count: {{ counterStore.count }}<\/p>\n    <p>Double Count: {{ counterStore.doubleCount }}<\/p>\n    <button @click=\"counterStore.increment()\">Increment<\/button>\n    <button @click=\"counterStore.fetchData()\">Fetch Data<\/button>\n  <\/div>\n<\/template>\n\n<script setup>\nimport { useCounterStore } from '..\/stores\/counter';\n\/\/ Pinia'da store'a eri\u015fmek i\u00e7in useStore hook'unu kullan\u0131r\u0131z\nconst counterStore = useCounterStore();\n\n\/\/ State'i do\u011frudan eri\u015febilir veya deconstruct edebiliriz (ancak reaktiviteyi kaybetmemek i\u00e7in storeToRefs kullanmal\u0131y\u0131z)\n\/\/ const { count, doubleCount } = storeToRefs(counterStore); \/\/ Reaktif referanslar i\u00e7in\n<\/script><\/code><\/pre>\n<p><strong>En \u0130yi Uygulamalar:<\/strong><br \/>\n*   <strong>Mod\u00fcler Yakla\u015f\u0131m:<\/strong> Her store, belirli bir uygulama alan\u0131na odaklanmal\u0131 ve kendi i\u00e7inde ba\u011f\u0131ms\u0131z olmal\u0131d\u0131r.<br \/>\n*   <strong>TypeScript:<\/strong> Pinia, TypeScript ile ba\u015ftan sona d\u00fc\u015f\u00fcn\u00fclerek tasarlanm\u0131\u015ft\u0131r ve m\u00fckemmel tip \u00e7\u0131kar\u0131m\u0131 sa\u011flar. Bu, geli\u015ftirme s\u0131ras\u0131nda hatalar\u0131 yakalamaya yard\u0131mc\u0131 olur.<br \/>\n*   <strong>DevTools:<\/strong> Vue DevTools ile kusursuz entegrasyonu sayesinde durum de\u011fi\u015fikliklerini izlemek ve hata ay\u0131klamak \u00e7ok kolayd\u0131r.<br \/>\n*   <strong><code>$patch<\/code> Kullan\u0131m\u0131:<\/strong> Birden fazla state \u00f6zelli\u011fini tek bir ad\u0131mda g\u00fcncellemek i\u00e7in <code>$patch<\/code> metodunu kullanmak performansl\u0131 ve izlenebilir g\u00fcncellemeler sa\u011flar.<\/p>\n<h3>Pinia&#8217;n\u0131n Avantajlar\u0131 ve Dezavantajlar\u0131<\/h3>\n<p><strong>Avantajlar\u0131:<\/strong><br \/>\n*   <strong>Basit API:<\/strong> Vuex&#8217;e g\u00f6re daha az boilerplate kodu ve daha sezgisel bir API sunar. Mutations kavram\u0131 olmad\u0131\u011f\u0131 i\u00e7in asenkron i\u015flemler daha do\u011fal bir \u015fekilde y\u00f6netilir.<br \/>\n*   <strong>TypeScript Deste\u011fi:<\/strong> Do\u011fal ve g\u00fc\u00e7l\u00fc TypeScript deste\u011fi sayesinde geli\u015ftirme s\u0131ras\u0131nda daha iyi tip g\u00fcvenli\u011fi ve otomatik tamamlama sa\u011flar.<br \/>\n*   <strong>Hafif ve Mod\u00fcler:<\/strong> Daha k\u00fc\u00e7\u00fck boyutludur ve her store ba\u011f\u0131ms\u0131z bir mod\u00fcl gibi \u00e7al\u0131\u015f\u0131r, bu da kod b\u00f6lmeyi (code splitting) kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>DevTools Entegrasyonu:<\/strong> Vue DevTools ile m\u00fckemmel entegrasyon, zaman yolculu\u011fu hata ay\u0131klamas\u0131 ve durum izleme imkan\u0131 sunar.<br \/>\n*   <strong>Vue 3 ve Composition API Uyumlu:<\/strong> Vue 3&#8217;\u00fcn Composition API&#8217;si ile tam uyumlu \u00e7al\u0131\u015f\u0131r ve Vue ekibi taraf\u0131ndan \u00f6nerilen \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<p><strong>Dezavantajlar\u0131:<\/strong><br \/>\n*   <strong>Nispeten Daha Yeni:<\/strong> Vuex kadar k\u00f6kl\u00fc bir ge\u00e7mi\u015fi olmasa da h\u0131zla benimsenmektedir. B\u00fcy\u00fck eski projelerde Vuex&#8217;ten ge\u00e7i\u015f maliyeti olabilir.<br \/>\n*   <strong>\u00d6\u011frenme Kaynaklar\u0131:<\/strong> Vuex kadar geni\u015f bir eski kaynak havuzuna sahip olmasa da, yeni ve g\u00fcncel kaynaklar h\u0131zla artmaktad\u0131r.<\/p>\n<h2>Vuex ve Pinia Kar\u015f\u0131la\u015ft\u0131rmas\u0131: Hangisini Ne Zaman Kullanmal\u0131?<\/h2>\n<p>Vuex ve Pinia aras\u0131ndaki se\u00e7im, projenin gereksinimlerine, ekibin deneyimine ve Vue s\u00fcr\u00fcm\u00fcne ba\u011fl\u0131d\u0131r. Her iki k\u00fct\u00fcphane de g\u00fc\u00e7l\u00fc durum y\u00f6netimi \u00e7\u00f6z\u00fcmleri sunar, ancak farkl\u0131 yakla\u015f\u0131mlara sahiptirler.<\/p>\n<h3>Mimari Farkl\u0131l\u0131klar<\/h3>\n<p>*   <strong>Mutations:<\/strong> Vuex, state&#8217;i de\u011fi\u015ftirmenin tek yolu olarak senkron <code>mutations<\/code>&#8216;\u0131 zorunlu k\u0131lar. Bu, durum de\u011fi\u015fikliklerinin izlenebilirli\u011fini art\u0131r\u0131r. Pinia&#8217;da ise <code>mutations<\/code> yoktur; state de\u011fi\u015fiklikleri do\u011frudan <code>actions<\/code> i\u00e7inde yap\u0131labilir veya <code>$patch<\/code> metoduyla toplu olarak g\u00fcncellenebilir. Bu, Pinia&#8217;y\u0131 daha esnek ve daha az boilerplate kodlu yapar.<br \/>\n*   <strong>Mod\u00fcl Yap\u0131s\u0131:<\/strong> Vuex, b\u00fcy\u00fck uygulamalar i\u00e7in store&#8217;u mod\u00fcllere ay\u0131rma konseptine sahiptir. Pinia&#8217;da ise her store zaten kendi ba\u015f\u0131na ba\u011f\u0131ms\u0131z bir mod\u00fcl gibidir, bu da daha do\u011fal bir mod\u00fclerlik sa\u011flar.<\/p>\n<h3>TypeScript Deste\u011fi<\/h3>\n<p>Pinia, TypeScript ile ba\u015ftan sona tasarlanm\u0131\u015ft\u0131r ve \u00fcst\u00fcn tip \u00e7\u0131kar\u0131m\u0131 sa\u011flar. Bu, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k uygulamalarda geli\u015ftirici deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirir. Vuex 4, TypeScript deste\u011fini iyile\u015ftirmi\u015f olsa da, Pinia kadar do\u011fal ve sorunsuz de\u011fildir.<\/p>\n<h3>Boilerplate Kodu<\/h3>\n<p>Pinia, Vuex&#8217;e g\u00f6re \u00f6nemli \u00f6l\u00e7\u00fcde daha az boilerplate kodu gerektirir. Mutations&#8217;\u0131n olmamas\u0131 ve daha basit bir API, daha h\u0131zl\u0131 geli\u015ftirme ve daha az yaz\u0131m hatas\u0131 anlam\u0131na gelir.<\/p>\n<h3>\u00d6\u011frenme E\u011frisi<\/h3>\n<p>Pinia&#8217;n\u0131n API&#8217;si daha basittir ve Vue&#8217;nin Composition API&#8217;sine daha yak\u0131nd\u0131r, bu da Vue geli\u015ftiricileri i\u00e7in \u00f6\u011frenme e\u011frisini d\u00fc\u015f\u00fcr\u00fcr. Vuex&#8217;in Flux mimarisi ve kat\u0131 kurallar\u0131, yeni ba\u015flayanlar i\u00e7in biraz daha karma\u015f\u0131k olabilir.<\/p>\n<h3>Performans ve Boyut<\/h3>\n<p>Pinia, Vuex&#8217;ten daha hafif bir k\u00fct\u00fcphanedir. Her iki k\u00fct\u00fcphane de Vue DevTools ile m\u00fckemmel entegrasyona sahiptir ve performans a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck farklar yaratmazlar.<\/p>\n<h3>Ge\u00e7i\u015f Senaryolar\u0131<\/h3>\n<p>*   <strong>Yeni Projeler:<\/strong> Vue 3 ve \u00fcst\u00fc ile yeni bir projeye ba\u015fl\u0131yorsan\u0131z, Pinia kesinlikle \u00f6nerilen \u00e7\u00f6z\u00fcmd\u00fcr. Modern Vue geli\u015ftirme pratikleriyle daha uyumludur.<br \/>\n*   <strong>Mevcut Vue 3 Projeleri (Vuex kullanan):<\/strong> E\u011fer mevcut bir Vue 3 projeniz Vuex kullan\u0131yorsa ve sorun ya\u015fam\u0131yorsan\u0131z, ge\u00e7i\u015f yapmak i\u00e7in acil bir neden olmayabilir. Ancak, Pinia&#8217;n\u0131n avantajlar\u0131ndan yararlanmak isterseniz, ad\u0131m ad\u0131m ge\u00e7i\u015f yapmak m\u00fcmk\u00fcnd\u00fcr.<br \/>\n*   <strong>Mevcut Vue 2 Projeleri:<\/strong> Vuex, Vue 2 projeleri i\u00e7in hala standart ve uygun bir \u00e7\u00f6z\u00fcmd\u00fcr. Pinia Vue 2&#8217;yi desteklemez.<\/p>\n<p><strong>\u00d6zet Kar\u015f\u0131la\u015ft\u0131rma Tablosu:<\/strong><\/p>\n<p>| \u00d6zellik           | Vuex                                       | Pinia                                        |<br \/>\n| :&#8212;&#8212;&#8212;&#8212;&#8212;- | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; | :&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- |<br \/>\n| <strong>Vue S\u00fcr\u00fcm\u00fc<\/strong>    | Vue 2 ve Vue 3 (Vuex 3\/4)                  | Sadece Vue 3 ve \u00fcst\u00fc                         |<br \/>\n| <strong>API Basitli\u011fi<\/strong> | Orta (Mutations, Actions, Getters, State)  | Y\u00fcksek (Actions, Getters, State)             |<br \/>\n| <strong>Boilerplate<\/strong>   | Daha fazla                                 | Daha az                                      |<br \/>\n| <strong>TypeScript<\/strong>    | Vuex 4 ile iyile\u015fti, ancak hala Pinia kadar do\u011fal de\u011fil | Do\u011fal ve g\u00fc\u00e7l\u00fc destek, m\u00fckemmel tip \u00e7\u0131kar\u0131m\u0131 |<br \/>\n| <strong>Mod\u00fcller<\/strong>      | Store&#8217;u mod\u00fcllere ay\u0131rma konsepti          | Her store kendi ba\u015f\u0131na bir mod\u00fcl gibidir     |<br \/>\n| <strong>Mutations<\/strong>     | Zorunlu (state&#8217;i de\u011fi\u015ftirmenin tek yolu)   | Yok (state do\u011frudan action&#8217;lar i\u00e7inde de\u011fi\u015febilir) |<br \/>\n| <strong>\u00d6\u011frenme E\u011frisi<\/strong>| Orta                                       | D\u00fc\u015f\u00fck                                        |<br \/>\n| <strong>Boyut<\/strong>         | Daha b\u00fcy\u00fck                                 | Daha hafif                                   |<br \/>\n| <strong>DevTools<\/strong>      | M\u00fckemmel entegrasyon                       | M\u00fckemmel entegrasyon                         |<br \/>\n| <strong>\u00d6neri<\/strong>         | Vue 2 projeleri veya mevcut Vuex projeleri | Yeni Vue 3 projeleri veya ge\u00e7i\u015f d\u00fc\u015f\u00fcnenler   |<\/p>\n<h2>Di\u011fer Durum Y\u00f6netimi Yakla\u015f\u0131mlar\u0131 ve K\u00fct\u00fcphaneler<\/h2>\n<p>Vuex ve Pinia en pop\u00fcler merkezi durum y\u00f6netimi \u00e7\u00f6z\u00fcmleri olsa da, baz\u0131 durumlarda farkl\u0131 yakla\u015f\u0131mlar veya daha spesifik k\u00fct\u00fcphaneler tercih edilebilir.<\/p>\n<h3>VueUse State Mod\u00fcl\u00fc<\/h3>\n<p>VueUse, Vue 3&#8217;\u00fcn Composition API&#8217;si i\u00e7in tasarlanm\u0131\u015f, \u00e7ok \u00e7e\u015fitli faydal\u0131 composable fonksiyonlar i\u00e7eren bir k\u00fct\u00fcphanedir. Kendi i\u00e7inde <code>createGlobalState<\/code>, <code>useLocalStorage<\/code>, <code>useSessionStorage<\/code>, <code>useStorage<\/code> gibi durum y\u00f6netimi ile ilgili composable&#8217;lar bar\u0131nd\u0131r\u0131r. Bu composable&#8217;lar, \u00f6zellikle k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli global durumlar veya taray\u0131c\u0131 depolamas\u0131yla senkronize edilmesi gereken durumlar i\u00e7in olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r. Tam te\u015fekk\u00fcll\u00fc bir merkezi store&#8217;un karma\u015f\u0131kl\u0131\u011f\u0131na ihtiya\u00e7 duymayan senaryolarda h\u0131zl\u0131 ve etkili \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<h3>Harici Durum Y\u00f6netimi \u00c7\u00f6z\u00fcmleri (\u00d6rn: Apollo Client, TanStack Query)<\/h3>\n<p>Baz\u0131 uygulamalar, durumlar\u0131n\u0131n b\u00fcy\u00fck bir k\u0131sm\u0131n\u0131 sunucudan gelen verilerle y\u00f6netir. Bu t\u00fcr senaryolarda, Apollo Client (GraphQL i\u00e7in) veya TanStack Query (eski ad\u0131yla React Query) gibi veri \u00e7ekme ve \u00f6nbellekleme k\u00fct\u00fcphaneleri devreye girer. Bu k\u00fct\u00fcphaneler, sunucu taraf\u0131ndaki verilerin durumunu (y\u00fckleme, hata, \u00f6nbelle\u011fe al\u0131nm\u0131\u015f veri, yeniden getirme vb.) y\u00f6netmek i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015ft\u0131r. Genellikle bu k\u00fct\u00fcphaneler, yerel uygulama durumunu (\u00f6rne\u011fin, UI durumunu) y\u00f6netmek i\u00e7in Pinia veya Vuex ile birlikte kullan\u0131l\u0131r. Bu hibrit yakla\u015f\u0131m, hem sunucu verisinin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 hem de yerel uygulama durumunun y\u00f6netimini optimize eder.<\/p>\n<h3>Kendi Reaktif \u00c7\u00f6z\u00fcm\u00fcn\u00fcz\u00fc Olu\u015fturmak<\/h3>\n<p>\u00c7ok k\u00fc\u00e7\u00fck uygulamalar veya \u00e7ok spesifik global durumlar i\u00e7in, Vue&#8217;nin yerle\u015fik reaktivite API&#8217;lerini (<code>ref<\/code>, <code>reactive<\/code>, <code>computed<\/code>) kullanarak kendi basit durum y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fcn\u00fcz\u00fc olu\u015fturabilirsiniz. \u00d6rne\u011fin, basit bir <code>reactive<\/code> nesnesini d\u0131\u015fa aktararak ve bu nesnenin \u00f6zelliklerini bile\u015fenlerde kullanarak temel bir global durum olu\u015fturulabilir. Ancak bu yakla\u015f\u0131m, uygulaman\u0131n karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a izlenebilirli\u011fi, hata ay\u0131klamay\u0131 ve \u00f6l\u00e7eklenebilirli\u011fi zorla\u015ft\u0131rabilir. Merkezi bir y\u00f6netim ve DevTools entegrasyonu gibi avantajlardan mahrum kal\u0131rs\u0131n\u0131z.<\/p>\n<h2>Do\u011fru Durum Y\u00f6netimi \u00c7\u00f6z\u00fcm\u00fcn\u00fc Se\u00e7mek<\/h2>\n<p>Do\u011fru durum y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fcn\u00fc se\u00e7mek, projenizin ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Karar verirken a\u015fa\u011f\u0131daki fakt\u00f6rleri g\u00f6z \u00f6n\u00fcnde bulundurmal\u0131s\u0131n\u0131z:<\/p>\n<p>*   <strong>Uygulaman\u0131n Boyutu ve Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong> K\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalar i\u00e7in <code>provide\/inject<\/code> veya basit composable&#8217;lar yeterli olabilir. B\u00fcy\u00fck, veri yo\u011fun ve karma\u015f\u0131k uygulamalar i\u00e7in Pinia veya Vuex gibi merkezi bir store kesinlikle gereklidir.<br \/>\n*   <strong>Ekip Yetkinlikleri:<\/strong> Ekibinizin Vuex veya Pinia konusundaki deneyimi, \u00f6\u011frenme e\u011frisi ve k\u00fct\u00fcphanenin benimsenme h\u0131z\u0131 \u00fczerinde etkili olacakt\u0131r. Pinia&#8217;n\u0131n daha basit API&#8217;si, yeni ba\u015flayan ekipler i\u00e7in daha cazip olabilir.<br \/>\n*   <strong>Gelecek \u00d6l\u00e7eklenebilirlik \u0130htiya\u00e7lar\u0131:<\/strong> Uygulaman\u0131z\u0131n gelecekte nas\u0131l b\u00fcy\u00fcyece\u011fini tahmin etmeye \u00e7al\u0131\u015f\u0131n. Ba\u015flang\u0131\u00e7ta basit bir \u00e7\u00f6z\u00fcm yeterli olsa bile, gelecekte merkezi bir store&#8217;a ge\u00e7i\u015f yapmak zorunda kal\u0131p kalmayaca\u011f\u0131n\u0131z\u0131 d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n*   <strong>Mevcut Ekosistem (Vue 2 mi Vue 3 m\u00fc?):<\/strong> E\u011fer Vue 2 ile \u00e7al\u0131\u015f\u0131yorsan\u0131z, Vuex varsay\u0131lan ve en uygun \u00e7\u00f6z\u00fcmd\u00fcr. Vue 3 ve \u00fcst\u00fc i\u00e7in Pinia, modern ve \u00f6nerilen yakla\u015f\u0131md\u0131r.<br \/>\n*   <strong>TypeScript Kullan\u0131m\u0131:<\/strong> E\u011fer TypeScript yo\u011fun bir \u015fekilde kullan\u0131yorsan\u0131z ve g\u00fc\u00e7l\u00fc tip g\u00fcvenli\u011fi sizin i\u00e7in \u00f6nemliyse, Pinia do\u011fal deste\u011fiyle \u00f6ne \u00e7\u0131kar.<\/p>\n<h2>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h2>\n<p>Durum y\u00f6netimi k\u00fct\u00fcphanesi ne olursa olsun, iyi pratikler uygulamak kodunuzun kalitesini art\u0131r\u0131r:<br \/>\n*   <strong>Durumu M\u00fcmk\u00fcn Oldu\u011funca Yerel Tutun:<\/strong> Her zaman global bir store kullanmaya \u00e7al\u0131\u015fmay\u0131n. E\u011fer bir durum sadece tek bir bile\u015fen taraf\u0131ndan kullan\u0131l\u0131yorsa, onu o bile\u015fenin i\u00e7inde tutun. Durumu ne kadar yerel tutarsan\u0131z, uygulaman\u0131z o kadar basit kal\u0131r.<br \/>\n*   <strong>Tek Sorumluluk Prensibi (Single Responsibility Principle):<\/strong> Store&#8217;lar\u0131n\u0131z\u0131 veya mod\u00fcllerinizi belirli bir uygulama alan\u0131na odaklay\u0131n. \u00d6rne\u011fin, <code>authStore<\/code>, <code>productStore<\/code> gibi. Bu, kodun daha d\u00fczenli ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>DevTools&#8217;u Etkin Kullan\u0131n:<\/strong> Vue DevTools, durum de\u011fi\u015fikliklerini izlemek, hata ay\u0131klamak ve uygulaman\u0131z\u0131n durum ak\u0131\u015f\u0131n\u0131 anlamak i\u00e7in paha bi\u00e7ilmez bir ara\u00e7t\u0131r.<br \/>\n*   <strong>TypeScript&#8217;ten Faydalan\u0131n:<\/strong> M\u00fcmk\u00fcnse TypeScript kullan\u0131n. Pinia&#8217;n\u0131n do\u011fal TypeScript deste\u011fi, durum \u015feman\u0131z\u0131 tan\u0131mlaman\u0131za ve geli\u015ftirme s\u0131ras\u0131nda hatalar\u0131 yakalaman\u0131za yard\u0131mc\u0131 olur.<br \/>\n*   <strong>Tutarl\u0131 Bir Yap\u0131land\u0131rma Sa\u011flay\u0131n:<\/strong> Store dosyalar\u0131n\u0131z\u0131n, getter&#8217;lar\u0131n\u0131z\u0131n ve action&#8217;lar\u0131n\u0131z\u0131n adland\u0131rmas\u0131 ve yap\u0131land\u0131rmas\u0131nda tutarl\u0131 olun. Bu, ekibinizin kod taban\u0131nda gezinmesini kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Asenkron \u0130\u015flemleri Y\u00f6netin:<\/strong> API \u00e7a\u011fr\u0131lar\u0131 gibi asenkron i\u015flemlerin ba\u015far\u0131, ba\u015far\u0131s\u0131zl\u0131k ve y\u00fckleme durumlar\u0131n\u0131 store i\u00e7inde d\u00fczg\u00fcn bir \u015fekilde y\u00f6netin.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Vue.js uygulamalar\u0131nda durum y\u00f6netimi, uygulaman\u0131n \u00f6l\u00e7e\u011fi ve karma\u015f\u0131kl\u0131\u011f\u0131 artt\u0131k\u00e7a vazge\u00e7ilmez bir hale gelir. Vuex, uzun y\u0131llar boyunca Vue ekosisteminin temel durum y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fc olmu\u015f ve b\u00fcy\u00fck projelere g\u00fc\u00e7 vermi\u015ftir. Ancak Vue 3 ve Composition API&#8217;nin ortaya \u00e7\u0131k\u0131\u015f\u0131yla birlikte, Pinia daha modern, hafif ve geli\u015ftirici dostu bir alternatif olarak \u00f6ne \u00e7\u0131km\u0131\u015ft\u0131r.<\/p>\n<p>Yeni bir Vue 3 projesine ba\u015fl\u0131yorsan\u0131z veya mevcut bir Vue 3 projenizde durum y\u00f6netimi \u00e7\u00f6z\u00fcm\u00fcn\u00fc g\u00f6zden ge\u00e7iriyorsan\u0131z, Pinia kesinlikle ilk tercihiniz olmal\u0131d\u0131r. Basit API&#8217;si, do\u011fal TypeScript deste\u011fi, daha az boilerplate kodu ve m\u00fckemmel DevTools entegrasyonu ile Pinia, modern Vue geli\u015ftirme deneyimini en \u00fcst d\u00fczeye \u00e7\u0131kar\u0131r. Vuex ise, \u00f6zellikle Vue 2 projeleri i\u00e7in hala g\u00fc\u00e7l\u00fc ve ge\u00e7erli bir se\u00e7enektir.<\/p>\n<p>Unutulmamal\u0131d\u0131r ki, do\u011fru k\u00fct\u00fcphaneyi se\u00e7mek kadar, o k\u00fct\u00fcphaneyi en iyi uygulamalarla kullanmak da \u00f6nemlidir. Durumu yerel tutmak, mod\u00fcler bir yap\u0131land\u0131rma benimsemek ve DevTools&#8217;tan etkin bir \u015fekilde yararlanmak, se\u00e7ti\u011finiz \u00e7\u00f6z\u00fcm ne olursa olsun uygulaman\u0131z\u0131n s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve performans\u0131n\u0131 art\u0131racakt\u0131r. Vue.js ekosisteminin s\u00fcrekli geli\u015fimiyle birlikte, durum y\u00f6netimi \u00e7\u00f6z\u00fcmleri de evrim ge\u00e7irmeye devam edecektir ve bu dinamik alanda bilgi sahibi olmak, ba\u015far\u0131l\u0131 ve \u00f6l\u00e7eklenebilir web uygulamalar\u0131 geli\u015ftirmek i\u00e7in anahtard\u0131r.<br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme\nGiri\u015f: Vue.js Uygulamalar\u0131nda Durum Y\u00f6netiminin \u00d6nemi\nModern web uygulamalar\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-34507","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 Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme - 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-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme\" \/>\n<meta property=\"og:description\" content=\"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme Giri\u015f: Vue.js Uygulamalar\u0131nda Durum Y\u00f6netiminin \u00d6nemi Modern web uygulamalar\u0131,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-17T21:40:57+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=\"20 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-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme\",\"datePublished\":\"2025-11-17T21:40:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/\"},\"wordCount\":3882,\"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-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/\",\"name\":\"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-17T21:40:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme\"}]},{\"@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 Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme - 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-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/","og_locale":"tr_TR","og_type":"article","og_title":"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme","og_description":"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme Giri\u015f: Vue.js Uygulamalar\u0131nda Durum Y\u00f6netiminin \u00d6nemi Modern web uygulamalar\u0131,","og_url":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-17T21:40:57+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme","datePublished":"2025-11-17T21:40:57+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/"},"wordCount":3882,"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-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/","url":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/","name":"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-17T21:40:57+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-durum-yonetimi-kutuphaneleri-kapsamli-bir-inceleme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vue.js Durum Y\u00f6netimi K\u00fct\u00fcphaneleri: Kapsaml\u0131 Bir \u0130nceleme"}]},{"@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\/34507","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=34507"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34507\/revisions"}],"predecessor-version":[{"id":34508,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/34507\/revisions\/34508"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=34507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=34507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=34507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}