Vue.js, uzun süredir yumuşak öğrenme eğrisi ve kademeli çerçeve tasarımıyla takdir edilmektedir. Vue 3'ün yayınlanmasıyla birlikte, çerçeve büyük ölçekli Tek Sayfa Uygulamaları (SPA) oluşturan geliştiricilerin karşılaştığı en önemli zorluklardan biri olan kod düzeni ve yeniden kullanılabilirliği ele alan bir paradigm shift getirdi. Bu değişim, Composition API olarak bilinir. Options API tam olarak desteklenmeye devam ederken, Composition API bileşenlerinizi yapılandırmak için daha esnek, tip güvenli ve mantıksal olarak tutarlı bir yol sunar. Bu yazıda, Composition API'nin neden bir oyun değiştirici olduğunu, nasıl çalıştığını ve daha temiz, daha sürdürülebilir Vue kodu yazmak için bunu nasıl kullanabileceğinizi keşfedeceğiz.
Options'tan Composition'a: Ölçeklenebilirlik Sorununu Çözme
Geleneksel Options API'de bileşen mantığı, seçenek türüne göre düzenlenir: data, methods, computed ve watch. Bu yaklaşım küçük ve orta boyutlu bileşenler için iyi çalışsa da, karmaşıklık arttığında sorunlu hale gelir. İlgili mantık genellikle farklı seçenekler arasında dağılır ve ilgisiz mantık birlikte gruplanır; bu da büyük bileşenleri anlamayı, bakımını yapmayı ve yeniden düzenlemeyi zorlaştırır. Örneğin, karmaşık bir kontrol paneli widget'ı oluşturuyorsanız, veri çekme, kullanıcı girdisini işleme ve görüntüleme metriklerini hesaplama mantığı, bileşen tanımının farklı kısımlarındaki onlarca satırda bölünmüş olabilir.
Composition API, kodu seçenek türüne göre değil, mantıksal endişeye göre düzenlemenize olanak tanıyarak bu sorunu çözer. Kodu data veya methods tarafından gruplamak yerine, ilgili mantığı işlevler halinde bir araya toplarsınız. Bu yaklaşım daha iyi okunabilirlik, daha kolay yeniden düzenleme ve kurumsal düzeydeki uygulamalar için kritik olan TypeScript için üstün destek sağlar.
Temel Kavramlar: Ref, Reactive ve Composables
Composition API'nin kalbi, @vue/reactivity paketi tarafından sağlanan bir dizi reaktif ilkelde yatar. En temel iki işlev ref ve reactive'dir.
ref, ilkel değerlere (dizeler, sayılar veya mantıksal değerler gibi) reaktif referanslar oluşturmak için kullanılır. Bir değeri .value özelliğinde tutar. Öte yandan reactive, reaktif nesneler oluşturmak için kullanılır. Nesnenin tüm özelliklerini reaktif hale getirmek için ES6 Proxies kullanır.
Bununla birlikte, Composition API'nin gerçek gücü Composables aracılığıyla ortaya çıkar. Bir Composable, durumlu mantığı kapsüllemek ve yeniden kullanmak için Vue'nun reaktif ilkelelerini kullanan basit bir işlevdir. Bu, Vue'nun reaktivite sistemi yerleşik olmak üzere React'teki özel hook'lara benzer. Mantığı composables'a ayırarak, ad alanı kirliliği ve belirsiz veri kökeni sorunlarına sahip olan mixin'lere başvurmadan davranışı birden fazla bileşen arasında paylaşabilirsiniz.
Pratik Örnek: Yeniden Kullanılabilir Bir Sayaç Oluşturma
Pratik bir örneğe bakalım. Diyelim ki bir butona kaç kez tıklandığını takip eden bir sayaça ihtiyacımız var. Options API'de bu basit görünse de, bunu Composition API ile nasıl yeniden kullanılabilir hale getirebileceğimize bakalım.
İlk olarak, useCounter adında bir Composable oluşturuyoruz:
// useCounter.js
import { ref } from 'vue';
export function useCounter(initialValue = 0) {
const count = ref(initialValue);
const increment = () => {
count.value++;
};
const decrement = () => {
count.value--;
};
return {
count,
increment,
decrement
};
}
Şimdi, bu composables'ı herhangi bir bileşende kullanabiliriz:
// CounterComponent.vue
<template>
<div>
<p>Sayaç: {{ count }}</p>
<button @click="increment">+</button>
<button @click="decrement">-</button>
</div>
</template>
<script setup>
import { useCounter } from './useCounter';
// Başlangıç değerini özelleştirebiliriz
const { count, increment, decrement } = useCounter(10);
</script>
Bileşen kodunun ne kadar temiz olduğuna dikkat edin. Mantık soyutlanmıştır ve bileşen yalnızca şabloya ve sayacın belirli bir örneğine odaklanır. Başka bir yerde başka bir sayaca ihtiyacımız olursa, sadece useCounter'ü farklı bir başlangıç değeri veya bağlam ile tekrar içe aktarıp başlatırız.
Neden Composition API'yi Benimsemelisiniz
Composition API'yi benimsemek sadece trendleri takip etmekle ilgili değildir; daha iyi mimari uygulamaları benimsemekle ilgilidir. Mixin'lerin dezavantajlarından yararlanmadan mantığın paylaşılmasına olanak tanıyarak kodun yeniden kullanılabilirliğini artırır. TypeScript'teki tip çıkarımını geliştirerek kod tabanınızı daha sağlam hale getirir. Son olarak, ilgili mantığı bir arada tutarak okunabilirliği artırır; bu da hata ayıklama veya özellikleri genişletirken bilişsel yükü önemli ölçüde azaltır.
Sonuç
Vue 3 Composition API, çerçevenin olgunlaşmasını temsil eder ve geliştiricilere ölçeklenebilir, sürdürülebilir ve yüksek performanslı uygulamalar oluşturmada gereken araçları sunar. Katı seçenek tabanlı yapılar yerine esnek, işlev tabanlı bileşimlere geçerek, okunması, test edilmesi ve yeniden kullanılması daha kolay kodlar yazabilirsiniz. İster yeni bir projeye başlayın ister mevcut bir projeyi yeniden düzenleyin, Composition API'yi benimsemek uzun vadede kesinlikle karşılığını verecektir. Karmaşık bileşenlerinizden birkaç composable çıkararak küçük adımlarla başlayın ve bu güçlü özelliğin faydalarını hızla göreceksiniz.