{"id":37034,"date":"2025-12-26T14:40:46","date_gmt":"2025-12-26T11:40:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=37034"},"modified":"2025-12-26T14:40:46","modified_gmt":"2025-12-26T11:40:46","slug":"vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/","title":{"rendered":"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131"},"content":{"rendered":"<p><body><\/p>\n<h2>Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131<\/h2>\n<p>Vue.js, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler, a\u015famal\u0131 bir JavaScript \u00e7er\u00e7evesidir. G\u00fc\u00e7l\u00fc yanlar\u0131ndan biri de sezgisel ve esnek \u015fablonlama sistemidir. \u015eablonlar, uygulaman\u0131z\u0131n verilerini al\u0131p taray\u0131c\u0131da kullan\u0131c\u0131lar\u0131n g\u00f6rebilece\u011fi HTML&#8217;e d\u00f6n\u00fc\u015ft\u00fcren bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Vue&#8217;nun \u015fablonlama sistemi, hem HTML tabanl\u0131 s\u00f6zdizimi ile kolayca \u00f6\u011frenilebilir hem de JavaScript&#8217;in g\u00fcc\u00fcn\u00fc reaktif bir \u015fekilde kullanman\u0131z\u0131 sa\u011flar. Bu makalede, Vue.js \u015fablonlaman\u0131n derinliklerine inecek, temel s\u00f6zdiziminden ileri d\u00fczey tekniklere kadar her y\u00f6n\u00fcn\u00fc detayl\u0131ca inceleyece\u011fiz.<\/p>\n<h3>Giri\u015f: \u015eablonlaman\u0131n \u00d6nemi ve Vue.js Yakla\u015f\u0131m\u0131<\/h3>\n<p>Modern web geli\u015ftirme, statik HTML sayfalar\u0131ndan dinamik ve etkile\u015fimli kullan\u0131c\u0131 aray\u00fczlerine do\u011fru b\u00fcy\u00fck bir de\u011fi\u015fim ge\u00e7irdi. Bu de\u011fi\u015fimin merkezinde, uygulaman\u0131n durumuna (state) g\u00f6re de\u011fi\u015fen HTML yap\u0131lar\u0131n\u0131 otomatik olarak olu\u015fturma yetene\u011fi olan \u015fablonlama (templating) sistemleri yer al\u0131r. Vue.js, bu ihtiyac\u0131 kar\u015f\u0131lamak i\u00e7in HTML tabanl\u0131, deklaratif bir \u015fablon s\u00f6zdizimi sunar. Bu s\u00f6zdizimi, geli\u015ftiricilerin DOM manip\u00fclasyonuyla u\u011fra\u015fmak yerine, uygulaman\u0131n mant\u0131\u011f\u0131na ve verilerine odaklanmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Vue \u015fablonlar\u0131, sanal DOM (Virtual DOM) ad\u0131 verilen bir mekanizma arac\u0131l\u0131\u011f\u0131yla optimize edilir. \u015eablonlar derlenerek JavaScript render fonksiyonlar\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Bu fonksiyonlar, uygulaman\u0131n durumu de\u011fi\u015fti\u011finde sanal DOM&#8217;u g\u00fcnceller ve ard\u0131ndan ger\u00e7ek DOM&#8217;daki yaln\u0131zca gerekli de\u011fi\u015fiklikleri minimum maliyetle uygular. Bu yakla\u015f\u0131m, hem performansl\u0131 hem de bak\u0131m\u0131 kolay uygulamalar olu\u015fturman\u0131n temelini olu\u015fturur.<\/p>\n<h3>Temel Vue \u015eablon S\u00f6zdizimi<\/h3>\n<p>Vue.js \u015fablonlar\u0131, standart HTML&#8217;e ek olarak \u00f6zel s\u00f6zdizimleri ve direktifler i\u00e7erir. Bu, verileri ba\u011flaman\u0131za, ko\u015fullu olarak \u00f6\u011feler render etmenize, listeler olu\u015fturman\u0131za ve olaylar\u0131 dinlemenize olanak tan\u0131r.<\/p>\n<h4>Metin \u0130\u00e7erik Ba\u011flama (Text Interpolation)<\/h4>\n<p>Vue&#8217;da en temel veri ba\u011flama \u015fekli, \u00e7ift s\u00fcsl\u00fc parantez (Mustache s\u00f6zdizimi) kullan\u0131larak metin i\u00e7eri\u011fini ba\u011flamakt\u0131r.<\/p>\n<pre><code class=\"language-html\"><p>{{ mesaj }}<\/p><\/code><\/pre>\n<p>Bu \u00f6rnekte, <code>mesaj<\/code> ad\u0131nda bir veri \u00f6zelli\u011fi, paragraf\u0131n i\u00e7eri\u011fine dinamik olarak ba\u011flan\u0131r. <code>mesaj<\/code> de\u011fi\u015fti\u011finde, paragraf\u0131n i\u00e7eri\u011fi otomatik olarak g\u00fcncellenir. S\u00fcsl\u00fc parantezler i\u00e7inde basit JavaScript ifadeleri de kullanabilirsiniz:<\/p>\n<pre><code class=\"language-html\"><p>{{ sayi + 1 }}<\/p>\n<p>{{ mesaj.split('').reverse().join('') }}<\/p><\/code><\/pre>\n<p>Ancak, s\u00fcsl\u00fc parantezler i\u00e7ine \u00e7ok karma\u015f\u0131k mant\u0131k yazmaktan ka\u00e7\u0131nmak en iyi uygulamad\u0131r. Mant\u0131\u011f\u0131 bile\u015feninizin <code>script<\/code> k\u0131sm\u0131ndaki <code>computed<\/code> \u00f6zelliklere veya <code>methods<\/code>&#8216;lara ta\u015f\u0131mak, \u015fablonlar\u0131n\u0131z\u0131 daha okunabilir hale getirir.<\/p>\n<h4>Ham HTML Ba\u011flama (Raw HTML)<\/h4>\n<p>Varsay\u0131lan olarak, Mustache s\u00f6zdizimi HTML i\u00e7eri\u011fini d\u00fcz metin olarak yorumlar. E\u011fer bir string&#8217;i ger\u00e7ek HTML olarak render etmek istiyorsan\u0131z, <code>v-html<\/code> direktifini kullanman\u0131z gerekir.<\/p>\n<pre><code class=\"language-html\"><div v-html=\"hamHTMLIcerik\"><\/div><\/code><\/pre>\n<p><strong>Uyar\u0131:<\/strong> Kullan\u0131c\u0131 taraf\u0131ndan sa\u011flanan i\u00e7eri\u011fi <code>v-html<\/code> ile render etmek, XSS (Cross-Site Scripting) sald\u0131r\u0131lar\u0131na yol a\u00e7abilir. Bu direktifi yaln\u0131zca g\u00fcvenilir i\u00e7erikle kullanmal\u0131s\u0131n\u0131z.<\/p>\n<h4>Nitelik Ba\u011flama (Attribute Binding)<\/h4>\n<p>HTML niteliklerine (attribute) dinamik de\u011ferler ba\u011flamak i\u00e7in <code>v-bind<\/code> direktifini kullan\u0131r\u0131z. <code>v-bind<\/code> k\u0131sa yaz\u0131m\u0131 <code>: <\/code> \u015feklindedir.<\/p>\n<pre><code class=\"language-html\"><a v-bind:href=\"url\">Ba\u011flant\u0131<\/a>\n<!-- K\u0131sa yaz\u0131m -->\n<img :src=\"resimUrl\" :alt=\"resimAltMetni\"><\/code><\/pre>\n<p><code>v-bind<\/code> sadece temel nitelikler i\u00e7in de\u011fil, <code>class<\/code> ve <code>style<\/code> gibi \u00f6zel nitelikler i\u00e7in de \u00e7ok g\u00fc\u00e7l\u00fcd\u00fcr.<\/p>\n<h5>S\u0131n\u0131f ve Stil Ba\u011flama (Class and Style Binding)<\/h5>\n<p><code>v-bind:class<\/code> ve <code>v-bind:style<\/code> ile CSS s\u0131n\u0131flar\u0131n\u0131 ve inline stilleri dinamik olarak y\u00f6netebilirsiniz.<\/p>\n<p>*   <strong>Nesne S\u00f6zdizimi ile S\u0131n\u0131f Ba\u011flama:<\/strong><\/p>\n<pre><code class=\"language-html\"><div :class=\"{ aktif: isActive, 'metin-hata': hasError }\"><\/div><\/code><\/pre>\n<p>    <code>isActive<\/code> ve <code>hasError<\/code> veri \u00f6zellikleri <code>true<\/code> oldu\u011funda ilgili s\u0131n\u0131flar uygulan\u0131r.<\/p>\n<p>*   <strong>Dizi S\u00f6zdizimi ile S\u0131n\u0131f Ba\u011flama:<\/strong><\/p>\n<pre><code class=\"language-html\"><div :class=\"[aktifSinif, hataSinifi]\"><\/div><\/code><\/pre>\n<p>    <code>aktifSinif<\/code> ve <code>hataSinifi<\/code> veri \u00f6zellikleri taraf\u0131ndan tutulan string de\u011ferler s\u0131n\u0131f olarak eklenir.<\/p>\n<p>*   <strong>Nesne S\u00f6zdizimi ile Stil Ba\u011flama:<\/strong><\/p>\n<pre><code class=\"language-html\"><div :style=\"{ color: aktifRenk, fontSize: boyut + 'px' }\"><\/div><\/code><\/pre>\n<p>    CSS \u00f6zellik adlar\u0131 camelCase veya kebab-case (<code>font-size<\/code>) olarak yaz\u0131labilir.<\/p>\n<p>*   <strong>Dizi S\u00f6zdizimi ile Stil Ba\u011flama:<\/strong><\/p>\n<pre><code class=\"language-html\"><div :style=\"[temelStil, ekStil]\"><\/div><\/code><\/pre>\n<h3>Direktifler (Directives)<\/h3>\n<p>Direktifler, <code>v-<\/code> \u00f6nekiyle ba\u015flayan \u00f6zel niteliklerdir ve Vue&#8217;nun \u015fablonlama sisteminin kalbinde yer al\u0131r. Direktifler, DOM&#8217;a reaktif davran\u0131\u015flar ekler.<\/p>\n<h4>Ko\u015fullu Render Etme (Conditional Rendering)<\/h4>\n<p>Belirli bir ko\u015fula ba\u011fl\u0131 olarak elemanlar\u0131 g\u00f6sterip gizlemek i\u00e7in <code>v-if<\/code>, <code>v-else-if<\/code>, <code>v-else<\/code> ve <code>v-show<\/code> direktiflerini kullan\u0131r\u0131z.<\/p>\n<p>*   <strong><code>v-if<\/code>, <code>v-else-if<\/code>, <code>v-else<\/code>:<\/strong> Bu direktifler, ko\u015ful <code>false<\/code> oldu\u011funda eleman\u0131 DOM&#8217;dan tamamen kald\u0131r\u0131r. Ko\u015ful <code>true<\/code> oldu\u011funda ise eleman\u0131 DOM&#8217;a ekler.<\/p>\n<pre><code class=\"language-html\"><div v-if=\"tip === 'A'\">Tip A<\/div>\n    <div v-else-if=\"tip === 'B'\">Tip B<\/div>\n    <div v-else>Di\u011fer Tip<\/div><\/code><\/pre>\n<p>    Bu direktifler bir <code><template><\/code> etiketi ile de kullan\u0131labilir, bu sayede DOM&#8217;a fazladan bir sarmalay\u0131c\u0131 eleman eklemeden birden fazla eleman\u0131 ko\u015fullu olarak render edebilirsiniz.<\/p>\n<p>*   <strong><code>v-show<\/code>:<\/strong> Bu direktif, eleman\u0131 DOM&#8217;da tutar ancak CSS <code>display<\/code> \u00f6zelli\u011fi ile g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc de\u011fi\u015ftirir. Ko\u015ful <code>false<\/code> oldu\u011funda <code>display: none<\/code> stilini uygular.<\/p>\n<pre><code class=\"language-html\"><div v-show=\"gorunur\">Bu eleman g\u00f6sterilir veya gizlenir.<\/div><\/code><\/pre>\n<p>    <strong><code>v-if<\/code> vs. <code>v-show<\/code>:<\/strong> <code>v-if<\/code> daha y\u00fcksek bir ge\u00e7i\u015f maliyetine sahiptir \u00e7\u00fcnk\u00fc elemanlar\u0131 olu\u015fturur ve yok eder. <code>v-show<\/code> ise daha y\u00fcksek bir ba\u015flang\u0131\u00e7 render maliyetine sahiptir \u00e7\u00fcnk\u00fc eleman her zaman DOM&#8217;da bulunur. S\u0131k s\u0131k ge\u00e7i\u015f yapman\u0131z gereken durumlarda <code>v-show<\/code> tercih edilirken, nadiren de\u011fi\u015fen ko\u015fullar i\u00e7in <code>v-if<\/code> daha uygundur.<\/p>\n<h4>Liste Render Etme (List Rendering)<\/h4>\n<p>Bir dizideki veya nesnedeki verileri kullanarak bir eleman listesi render etmek i\u00e7in <code>v-for<\/code> direktifini kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-html\"><ul>\n  <li v-for=\"item in items\" :key=\"item.id\">{{ item.mesaj }}<\/li>\n<\/ul><\/code><\/pre>\n<p>*   <strong>Dizilerle <code>v-for<\/code>:<\/strong> <code>v-for=\"item in items\"<\/code> s\u00f6zdizimi, <code>items<\/code> dizisindeki her bir <code>item<\/code> i\u00e7in bir <code><\/p>\n<li><\/code> eleman\u0131 olu\u015fturur. \u0130ste\u011fe ba\u011fl\u0131 olarak, mevcut \u00f6\u011fenin indeksini de alabilirsiniz: <code>v-for=\"(item, index) in items\"<\/code>.<br \/>\n*   <strong>Nesnelerle <code>v-for<\/code>:<\/strong> Bir nesnenin \u00f6zelliklerini iterate etmek i\u00e7in de <code>v-for<\/code> kullan\u0131labilir: <code>v-for=\"(value, key, index) in nesne\"<\/code>.<br \/>\n*   <strong>Say\u0131 aral\u0131\u011f\u0131 ile <code>v-for<\/code>:<\/strong> Belirli bir say\u0131 aral\u0131\u011f\u0131nda eleman olu\u015fturmak i\u00e7in <code>v-for=\"n in 10\"<\/code> kullan\u0131labilir.<\/p>\n<h5><code>key<\/code> Niteliklerinin \u00d6nemi<\/h5>\n<p><code>v-for<\/code> ile liste render ederken her zaman benzersiz bir <code>key<\/code> niteli\u011fi sa\u011flamak \u00e7ok \u00f6nemlidir. Vue, <code>key<\/code> niteli\u011fini her bir d\u00fc\u011f\u00fcm\u00fcn kimli\u011fini izlemek i\u00e7in kullan\u0131r, bu da performans optimizasyonlar\u0131na ve liste \u00f6\u011felerinin do\u011fru bir \u015fekilde g\u00fcncellenmesine olanak tan\u0131r.<\/p>\n<pre><code class=\"language-html\"><li v-for=\"todo in todos\" :key=\"todo.id\">\n  {{ todo.text }}\n<\/li><\/code><\/pre>\n<p><code>key<\/code> olmadan, Vue varsay\u0131lan olarak &#8220;in-place patch&#8221; stratejisini kullan\u0131r, bu da listede de\u011fi\u015fiklikler oldu\u011funda beklenmedik davran\u0131\u015flara veya performans sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<h4>Olay Dinleme (Event Handling)<\/h4>\n<p>Kullan\u0131c\u0131 etkile\u015fimlerini (t\u0131klamalar, giri\u015fler vb.) dinlemek ve bunlara yan\u0131t vermek i\u00e7in <code>v-on<\/code> direktifini kullan\u0131r\u0131z. <code>v-on<\/code> k\u0131sa yaz\u0131m\u0131 <code>@<\/code> \u015feklindedir.<\/p>\n<pre><code class=\"language-html\"><button v-on:click=\"handleClick\">T\u0131kla<\/button>\n<!-- K\u0131sa yaz\u0131m -->\n<input @input=\"handleInput\" :value=\"metin\"><\/code><\/pre>\n<p>Olay dinleyicileri do\u011frudan inline JavaScript ifadeleri \u00e7al\u0131\u015ft\u0131rabilir veya bile\u015feninizin <code>methods<\/code> nesnesinde tan\u0131mlanm\u0131\u015f bir fonksiyonu \u00e7a\u011f\u0131rabilir.<\/p>\n<h5>Olay De\u011fi\u015ftiriciler (Event Modifiers)<\/h5>\n<p>Vue, yayg\u0131n olay i\u015fleme g\u00f6revlerini basitle\u015ftirmek i\u00e7in <code>.prevent<\/code>, <code>.stop<\/code>, <code>.capture<\/code>, <code>.self<\/code>, <code>.once<\/code>, <code>.passive<\/code> gibi olay de\u011fi\u015ftiriciler sunar.<\/p>\n<pre><code class=\"language-html\"><!-- Form g\u00f6ndermeyi engeller -->\n<form @submit.prevent=\"submitForm\"><\/form>\n\n<!-- T\u0131klama olay\u0131n\u0131n yay\u0131lmas\u0131n\u0131 durdurur -->\n<div @click.stop=\"doThis\"><\/div>\n\n<!-- Yaln\u0131zca bir kez tetiklenir -->\n<button @click.once=\"doThat\"><\/button><\/code><\/pre>\n<p>Klavye olaylar\u0131 i\u00e7in tu\u015f kodlar\u0131 veya tu\u015f adlar\u0131 da kullan\u0131labilir: <code>@keyup.enter<\/code>, <code>@keydown.tab<\/code>.<\/p>\n<h4>\u0130ki Y\u00f6nl\u00fc Veri Ba\u011flama (Two-Way Data Binding)<\/h4>\n<p>Form giri\u015f elemanlar\u0131 (input, textarea, select) ile bile\u015fen verileri aras\u0131nda iki y\u00f6nl\u00fc veri ba\u011flamay\u0131 sa\u011flamak i\u00e7in <code>v-model<\/code> direktifini kullan\u0131r\u0131z. <code>v-model<\/code>, temelde <code>:value<\/code> ve <code>@input<\/code> olay dinleyicisinin bir sentezidir.<\/p>\n<pre><code class=\"language-html\"><input type=\"text\" v-model=\"mesaj\">\n<textarea v-model=\"metin\"><\/textarea>\n<select v-model=\"secilen\">\n  <option>Se\u00e7enek 1<\/option>\n  <option>Se\u00e7enek 2<\/option>\n<\/select><\/code><\/pre>\n<h5><code>v-model<\/code> De\u011fi\u015ftiriciler (Modifiers)<\/h5>\n<p><code>v-model<\/code> de <code>.lazy<\/code>, <code>.number<\/code>, <code>.trim<\/code> gibi de\u011fi\u015ftiricilere sahiptir:<\/p>\n<p>*   <code>.lazy<\/code>: <code>input<\/code> olay\u0131 yerine <code>change<\/code> olay\u0131nda senkronize olur.<br \/>\n*   <code>.number<\/code>: Giri\u015f de\u011ferini otomatik olarak bir say\u0131ya d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<br \/>\n*   <code>.trim<\/code>: Giri\u015f de\u011ferindeki ba\u015ftaki ve sondaki bo\u015fluklar\u0131 otomatik olarak k\u0131rpar.<\/p>\n<h3>Computed \u00d6zellikler ve \u0130zleyiciler (Computed Properties and Watchers)<\/h3>\n<p>\u015eablonlarda karma\u015f\u0131k mant\u0131\u011f\u0131 y\u00f6netmek i\u00e7in <code>computed<\/code> \u00f6zellikler ve <code>watch<\/code> izleyiciler kullan\u0131l\u0131r.<\/p>\n<h4>Computed \u00d6zellikler (Computed Properties)<\/h4>\n<p><code>computed<\/code> \u00f6zellikler, reaktif ba\u011f\u0131ml\u0131l\u0131klar\u0131na g\u00f6re \u00f6nbelle\u011fe al\u0131nm\u0131\u015f de\u011ferler d\u00f6nd\u00fcren fonksiyonlard\u0131r. Bir <code>computed<\/code> \u00f6zelli\u011fin ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015fmedi\u011fi s\u00fcrece, de\u011feri tekrar hesaplanmaz, bu da performans\u0131 art\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">data() {\n  return {\n    firstName: 'John',\n    lastName: 'Doe'\n  }\n},\ncomputed: {\n  fullName() {\n    return this.firstName + ' ' + this.lastName;\n  }\n}<\/code><\/pre>\n<pre><code class=\"language-html\"><p>Tam Ad\u0131: {{ fullName }}<\/p><\/code><\/pre>\n<p><code>computed<\/code> \u00f6zellikler, \u015fablonlardaki karma\u015f\u0131k ifadeleri basitle\u015ftirmek, filtrelenmi\u015f veya s\u0131ralanm\u0131\u015f listeler olu\u015fturmak ve karma\u015f\u0131k hesaplamalar\u0131 optimize etmek i\u00e7in idealdir. Metotlardan fark\u0131, ba\u011f\u0131ml\u0131l\u0131klar\u0131 de\u011fi\u015fmedi\u011fi s\u00fcrece sonucun \u00f6nbelle\u011fe al\u0131nmas\u0131d\u0131r.<\/p>\n<h4>\u0130zleyiciler (Watchers)<\/h4>\n<p><code>watch<\/code> izleyiciler, belirli bir veri \u00f6zelli\u011finin de\u011fi\u015fmesini izlemenize ve bu de\u011fi\u015fiklik oldu\u011funda bir yan etki (side effect) ger\u00e7ekle\u015ftirmenize olanak tan\u0131r. Genellikle asenkron i\u015flemler veya pahal\u0131 i\u015flemler i\u00e7in kullan\u0131l\u0131rlar.<\/p>\n<pre><code class=\"language-javascript\">data() {\n  return {\n    soru: '',\n    cevap: 'Ben sadece sorular\u0131 bekliyorum...'\n  }\n},\nwatch: {\n  soru(yeniSoru, eskiSoru) {\n    if (yeniSoru.includes('?')) {\n      this.getAnswer();\n    }\n  }\n},\nmethods: {\n  getAnswer() {\n    this.cevap = 'D\u00fc\u015f\u00fcn\u00fcyorum...';\n    \/\/ API \u00e7a\u011fr\u0131s\u0131 gibi asenkron bir i\u015flem\n    setTimeout(() => {\n      this.cevap = 'Kesinlikle evet!';\n    }, 1000);\n  }\n}<\/code><\/pre>\n<p><code>watch<\/code> izleyiciler, \u00f6zellikle bir veri de\u011fi\u015fikli\u011fine yan\u0131t olarak DOM manip\u00fclasyonu, API \u00e7a\u011fr\u0131lar\u0131 veya di\u011fer asenkron i\u015flemler yapman\u0131z gerekti\u011finde kullan\u0131\u015fl\u0131d\u0131r. <code>deep<\/code> ve <code>immediate<\/code> gibi se\u00e7enekleri de vard\u0131r.<\/p>\n<h3>\u015eablon Referanslar\u0131 (Template Refs)<\/h3>\n<p>Bazen, bile\u015feninizdeki belirli bir DOM eleman\u0131na veya alt bile\u015fen \u00f6rne\u011fine do\u011frudan eri\u015fmeniz gerekebilir. Bu durumlarda <code>ref<\/code> niteli\u011fini kullan\u0131r\u0131z.<\/p>\n<pre><code class=\"language-html\"><input type=\"text\" ref=\"inputAlan\">\n<my-child-component ref=\"altBilesen\"><\/my-child-component><\/code><\/pre>\n<p>Bile\u015fen \u00f6rne\u011fi i\u00e7inde, bu referanslara <code>this.$refs<\/code> arac\u0131l\u0131\u011f\u0131yla eri\u015febilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">mounted() {\n  this.$refs.inputAlan.focus(); \/\/ Input alan\u0131na odaklanma\n  this.$refs.altBilesen.someMethod(); \/\/ Alt bile\u015fenin bir metodunu \u00e7a\u011f\u0131rma\n}<\/code><\/pre>\n<p><code>ref<\/code> kullanmaktan m\u00fcmk\u00fcn oldu\u011funca ka\u00e7\u0131nmak ve reaktif veri ak\u0131\u015f\u0131n\u0131 tercih etmek genellikle daha iyi bir uygulamad\u0131r. Ancak, \u00fc\u00e7\u00fcnc\u00fc taraf k\u00fct\u00fcphanelerle entegrasyon veya DOM&#8217;a do\u011frudan eri\u015fimin ka\u00e7\u0131n\u0131lmaz oldu\u011fu durumlarda vazge\u00e7ilmezdir.<\/p>\n<h3>Slotlar (Slots)<\/h3>\n<p>Slotlar, bile\u015fenler aras\u0131 i\u00e7erik da\u011f\u0131t\u0131m\u0131 i\u00e7in g\u00fc\u00e7l\u00fc bir mekanizmad\u0131r. Bir bile\u015fenin, render etti\u011fi i\u00e7eri\u011fin bir k\u0131sm\u0131n\u0131 \u00fcst bile\u015fenin belirlemesine olanak tan\u0131r.<\/p>\n<h4>Varsay\u0131lan Slotlar (Default Slots)<\/h4>\n<p>Bir bile\u015fen i\u00e7ine yerle\u015ftirilen t\u00fcm i\u00e7erik, varsay\u0131lan olarak <code><slot><\/slot><\/code> etiketiyle i\u015faretlenmi\u015f yere render edilir.<\/p>\n<pre><code class=\"language-html\"><!-- ChildComponent.vue -->\n<div>\n  <header>Ba\u015fl\u0131k<\/header>\n  <main>\n    <slot><\/slot> <!-- \u00dcst bile\u015fenden gelen i\u00e7erik buraya yerle\u015fir -->\n  <\/main>\n  <footer>Altbilgi<\/footer>\n<\/div><\/code><\/pre>\n<pre><code class=\"language-html\"><!-- ParentComponent.vue -->\n<ChildComponent>\n  <p>Bu, \u00fcst bile\u015fenden gelen i\u00e7eriktir.<\/p>\n<\/ChildComponent><\/code><\/pre>\n<h4>Adland\u0131r\u0131lm\u0131\u015f Slotlar (Named Slots)<\/h4>\n<p>Birden fazla slot alan\u0131 tan\u0131mlaman\u0131z gerekti\u011finde adland\u0131r\u0131lm\u0131\u015f slotlar\u0131 kullan\u0131r\u0131z. Her slotun benzersiz bir <code>name<\/code> niteli\u011fi olur. \u00dcst bile\u015fen, <code>v-slot:<\/code> direktifi veya k\u0131sa yaz\u0131m\u0131 <code>#<\/code> ile belirli bir slota i\u00e7erik yerle\u015ftirebilir.<\/p>\n<pre><code class=\"language-html\"><!-- LayoutComponent.vue -->\n<div>\n  <header>\n    <slot name=\"header\"><\/slot>\n  <\/header>\n  <main>\n    <slot><\/slot> <!-- Varsay\u0131lan slot -->\n  <\/main>\n  <footer>\n    <slot name=\"footer\"><\/slot>\n  <\/footer>\n<\/div><\/code><\/pre>\n<pre><code class=\"language-html\"><!-- App.vue -->\n<LayoutComponent>\n  <template v-slot:header>\n    \n  <\/template>\n  <p>Ana i\u00e7erik buraya gelir.<\/p>\n  <template #footer>\n    <p>&copy; 2023<\/p>\n  <\/template>\n<\/LayoutComponent><\/code><\/pre>\n<h4>Kapsaml\u0131 Slotlar (Scoped Slots)<\/h4>\n<p>Kapsaml\u0131 slotlar, \u00e7ocuk bile\u015fenin kendi verilerini \u00fcst bile\u015fenin slot i\u00e7eri\u011fine iletmesine olanak tan\u0131r. Bu, \u00fcst bile\u015fenin, \u00e7ocuk bile\u015fenin verilerini kullanarak slot i\u00e7eri\u011fini render etmesini sa\u011flar.<\/p>\n<pre><code class=\"language-html\"><!-- ListItem.vue -->\n<li>\n  <slot :item=\"itemData\" :index=\"index\"><\/slot>\n<\/li><\/code><\/pre>\n<pre><code class=\"language-html\"><!-- ParentComponent.vue -->\n<ListItem v-for=\"(item, i) in items\" :key=\"item.id\" :item-data=\"item\" :index=\"i\">\n  <template v-slot=\"slotProps\">\n    {{ slotProps.index }}. {{ slotProps.item.name }}\n  <\/template>\n<\/ListItem><\/code><\/pre>\n<p><code>v-slot=\"slotProps\"<\/code> s\u00f6zdizimi ile \u00e7ocuk bile\u015fenden iletilen t\u00fcm slot \u00f6zelliklerine eri\u015febiliriz.<\/p>\n<h3>Dinamik Bile\u015fenler ve Keep-Alive<\/h3>\n<p>Vue, farkl\u0131 bile\u015fenleri dinamik olarak render etme yetene\u011fi sunar ve bu bile\u015fenlerin durumunu korumak i\u00e7in bir mekanizma sa\u011flar.<\/p>\n<h4>Dinamik Bile\u015fenler (<code><component :is=\"...\"><\/code>)<\/h4>\n<p><code><component><\/code> \u00f6zel eleman\u0131 ve <code>:is<\/code> niteli\u011fi ile farkl\u0131 bile\u015fenleri dinamik olarak de\u011fi\u015ftirebilirsiniz.<\/p>\n<pre><code class=\"language-html\"><component :is=\"aktifBilesenAdi\"><\/component><\/code><\/pre>\n<p><code>aktifBilesenAdi<\/code> veri \u00f6zelli\u011fi de\u011fi\u015fti\u011finde, Vue otomatik olarak o isme sahip bile\u015feni render eder. Bu, sekmeli aray\u00fczler veya sihirbaz benzeri formlar olu\u015fturmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<h4><code>Keep-Alive<\/code><\/h4>\n<p>Dinamik bile\u015fenler aras\u0131nda ge\u00e7i\u015f yaparken, Vue varsay\u0131lan olarak eski bile\u015feni yok eder ve yenisini olu\u015fturur. E\u011fer bir bile\u015fenin durumunu korumak ve her ge\u00e7i\u015fte yeniden olu\u015fturulmas\u0131n\u0131 \u00f6nlemek istiyorsan\u0131z, <code><keep-alive><\/code> sarmalay\u0131c\u0131 bile\u015fenini kullanabilirsiniz.<\/p>\n<pre><code class=\"language-html\"><keep-alive>\n  <component :is=\"aktifBilesenAdi\"><\/component>\n<\/keep-alive><\/code><\/pre>\n<p><code><keep-alive><\/code> i\u00e7indeki bile\u015fenler yok edilmek yerine \u00f6nbelle\u011fe al\u0131n\u0131r. Bu bile\u015fenler i\u00e7in <code>activated<\/code> ve <code>deactivated<\/code> ad\u0131nda iki yeni ya\u015fam d\u00f6ng\u00fcs\u00fc kancas\u0131 kullan\u0131labilir.<\/p>\n<h3>\u015eablon \u0130\u00e7inde JavaScript Kullan\u0131m\u0131<\/h3>\n<p>Vue \u015fablonlar\u0131, s\u00fcsl\u00fc parantezlerin i\u00e7inde veya direktif niteliklerinin de\u011ferlerinde s\u0131n\u0131rl\u0131 JavaScript ifadelerinin kullan\u0131lmas\u0131na izin verir.<\/p>\n<pre><code class=\"language-html\"><p>{{ isLogged ? 'Ho\u015f geldiniz!' : 'Giri\u015f Yap\u0131n' }}<\/p>\n<button @click=\"sayac++\">Artt\u0131r<\/button><\/code><\/pre>\n<p>Ancak, \u015fablon i\u00e7inde karma\u015f\u0131k mant\u0131k, d\u00f6ng\u00fcler veya if-else bloklar\u0131 yazmaktan ka\u00e7\u0131nmak \u00f6nemlidir. \u015eablonlar m\u00fcmk\u00fcn oldu\u011funca deklaratif ve okunabilir olmal\u0131d\u0131r. Karma\u015f\u0131k mant\u0131k, <code>computed<\/code> \u00f6zelliklere veya <code>methods<\/code>&#8216;a ta\u015f\u0131nmal\u0131d\u0131r. Bu, \u015fablonlar\u0131n\u0131z\u0131 daha temiz tutar, test edilebilirli\u011fi art\u0131r\u0131r ve uygulaman\u0131z\u0131n genel mimarisini iyile\u015ftirir.<\/p>\n<h3>\u015eablon Derlemesi (Template Compilation)<\/h3>\n<p>Vue \u015fablonlar\u0131 do\u011frudan taray\u0131c\u0131 taraf\u0131ndan yorumlanmaz. Bunun yerine, Vue bunlar\u0131 sanal DOM d\u00fc\u011f\u00fcmleri olu\u015fturan JavaScript render fonksiyonlar\u0131na derler. Bu derleme s\u00fcreci iki \u015fekilde ger\u00e7ekle\u015febilir:<\/p>\n<p>*   <strong>\u00c7al\u0131\u015fma Zaman\u0131 Derlemesi (Runtime Compilation):<\/strong> E\u011fer Vue&#8217;nun tam (runtime + compiler) yap\u0131s\u0131n\u0131 kullan\u0131yorsan\u0131z, taray\u0131c\u0131da \u015fablon stringleri do\u011frudan render fonksiyonlar\u0131na derlenir. Bu, daha b\u00fcy\u00fck bir Vue paketi anlam\u0131na gelir.<br \/>\n*   <strong>Derleme Zaman\u0131 Derlemesi (Build-time Compilation):<\/strong> Genellikle Vue CLI veya Vite gibi ara\u00e7larla bir derleme ad\u0131m\u0131 kullan\u0131ld\u0131\u011f\u0131nda, <code>.vue<\/code> dosyalar\u0131ndaki \u015fablonlar \u00f6nceden derlenir ve do\u011frudan render fonksiyonlar\u0131 olarak nihai pakete dahil edilir. Bu, daha k\u00fc\u00e7\u00fck bir paket boyutu ve daha h\u0131zl\u0131 ba\u015flang\u0131\u00e7 render s\u00fcresi sa\u011flar.<\/p>\n<p>Geli\u015fmi\u015f senaryolarda, do\u011frudan <code>render<\/code> fonksiyonlar\u0131 yazabilir veya JSX\/TSX kullanabilirsiniz. Bu, \u015fablonlar\u0131n k\u0131s\u0131tlamalar\u0131n\u0131 a\u015fman\u0131z\u0131 sa\u011flar ancak daha fazla kod yazman\u0131z\u0131 gerektirir ve genellikle sadece \u00e7ok \u00f6zel optimizasyonlar veya karma\u015f\u0131k dinamik yap\u0131lar i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h3>\u0130yi Uygulamalar ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Etkili Vue \u015fablonlar\u0131 yazmak i\u00e7in baz\u0131 iyi uygulamalar ve performans ipu\u00e7lar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>\u015eablonlar\u0131 Basit Tutun:<\/strong> \u015eablonlar deklaratif olmal\u0131 ve karma\u015f\u0131k mant\u0131k i\u00e7ermemelidir. T\u00fcm karma\u015f\u0131k hesaplamalar\u0131 ve yan etkileri <code>computed<\/code> \u00f6zelliklere veya <code>methods<\/code>&#8216;a ta\u015f\u0131y\u0131n.<br \/>\n*   <strong><code>v-for<\/code> ile <code>key<\/code> Kullan\u0131n:<\/strong> Listeleri render ederken her zaman benzersiz ve kararl\u0131 <code>key<\/code> nitelikleri sa\u011flay\u0131n. Bu, Vue&#8217;nun DOM&#8217;u verimli bir \u015fekilde g\u00fcncellemesine yard\u0131mc\u0131 olur ve potansiyel hatalar\u0131 \u00f6nler.<br \/>\n*   <strong><code>v-if<\/code> ve <code>v-show<\/code> Fark\u0131n\u0131 Anlay\u0131n:<\/strong> S\u0131k s\u0131k ge\u00e7i\u015f yapan elemanlar i\u00e7in <code>v-show<\/code>&#8216;u, nadiren de\u011fi\u015fen ve pahal\u0131 ba\u015flang\u0131\u00e7 maliyeti olan elemanlar i\u00e7in <code>v-if<\/code>&#8216;i kullan\u0131n.<br \/>\n*   <strong>Gereksiz Reaktiviteden Ka\u00e7\u0131n\u0131n:<\/strong> Yaln\u0131zca reaktif olmas\u0131 gereken verileri <code>data<\/code>&#8216;ya koyun. Statik veya de\u011fi\u015fmeyecek veriler i\u00e7in Vue&#8217;nun reaktivite sistemine ek y\u00fck bindirmeyin.<br \/>\n*   <strong>B\u00fcy\u00fck Listeleri Sanalla\u015ft\u0131r\u0131n:<\/strong> Binlerce \u00f6\u011fe i\u00e7eren listeleri render ediyorsan\u0131z, performans sorunlar\u0131n\u0131 \u00f6nlemek i\u00e7in bir sanalla\u015ft\u0131rma (virtualization) k\u00fct\u00fcphanesi (\u00f6rn. <code>vue-virtual-scroller<\/code>) kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn. Bu k\u00fct\u00fcphaneler, yaln\u0131zca g\u00f6r\u00fcn\u00fcr \u00f6\u011feleri render ederek performans\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Bile\u015fenleri Do\u011fru \u015eekilde Ay\u0131r\u0131n:<\/strong> B\u00fcy\u00fck ve karma\u015f\u0131k \u015fablonlar\u0131 daha k\u00fc\u00e7\u00fck, yeniden kullan\u0131labilir bile\u015fenlere ay\u0131r\u0131n. Bu, kodun okunabilirli\u011fini, bak\u0131m\u0131n\u0131 ve test edilebilirli\u011fini art\u0131r\u0131r.<br \/>\n*   <strong>Olay Dinleyicilerini Temizleyin:<\/strong> Bile\u015fenler yok edildi\u011finde, manuel olarak ekledi\u011finiz DOM olay dinleyicilerini (Vue&#8217;nun <code>v-on<\/code> ile ekledikleri otomatik olarak temizlenir) kald\u0131rmay\u0131 unutmay\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Vue.js&#8217;in \u015fablonlama sistemi, web geli\u015ftiricilerine g\u00fc\u00e7l\u00fc, esnek ve sezgisel bir yol sunar. Metin ba\u011flamadan direktiflere, slotlardan dinamik bile\u015fenlere kadar geni\u015f bir yelpazedeki \u00f6zellikleriyle, uygulaman\u0131z\u0131n verilerini dinamik ve reaktif kullan\u0131c\u0131 aray\u00fczlerine d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in ihtiyac\u0131n\u0131z olan her \u015feyi sa\u011flar. \u015eablonlama s\u00f6zdizimini iyi anlamak ve en iyi uygulamalar\u0131 takip etmek, performansl\u0131, bak\u0131m\u0131 kolay ve \u00f6l\u00e7eklenebilir Vue.js uygulamalar\u0131 geli\u015ftirmenin anahtar\u0131d\u0131r. Vue&#8217;nun \u015fablonlama yeteneklerini ustaca kullanarak, kullan\u0131c\u0131 deneyimini zenginle\u015ftiren ve geli\u015ftirme s\u00fcrecini keyifli hale getiren uygulamalar olu\u015fturabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131\nVue.js, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler, a\u015fama","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-37034","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 Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131 - 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-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131\" \/>\n<meta property=\"og:description\" content=\"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131 Vue.js, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler, a\u015fama\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-26T11:40:46+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=\"13 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-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131\",\"datePublished\":\"2025-12-26T11:40:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/\"},\"wordCount\":2359,\"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-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/\",\"name\":\"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-26T11:40:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131\"}]},{\"@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 Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131 - 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-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/","og_locale":"tr_TR","og_type":"article","og_title":"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131","og_description":"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131 Vue.js, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in pop\u00fcler, a\u015fama","og_url":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-26T11:40:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131","datePublished":"2025-12-26T11:40:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/"},"wordCount":2359,"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-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/","url":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/","name":"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-26T11:40:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/vue-js-templating-dinamik-ve-reaktif-kullanici-arayuzleri-olusturma-sanati\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Vue.js Templating: Dinamik ve Reaktif Kullan\u0131c\u0131 Aray\u00fczleri Olu\u015fturma Sanat\u0131"}]},{"@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\/37034","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=37034"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37034\/revisions"}],"predecessor-version":[{"id":37035,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37034\/revisions\/37035"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}