yayınlandıVueJs12 dakika okuma süresi (Yaklaşık 1825 kelime)
Vue 3 - Composition Api İncelemesi
Vue küçük ve orta ölçekli uygulamaların hayata geçirilmesi için çok hızlı üretim yapabilmemize olanak sağlayan ve öğrenme eğrisi yüksek bir çatıdır. Fakat projelerimizin omuzlarındaki yük arttıkça Vue 2.0’ın bize sunmuş olduğu Options Api’ı işleri zorlaştırmaya başlar. Hatta zamanımızın büyük bölümünü düzenleyicimizi yukarı aşağı kaydırarak geçirdiğimizi fark ederiz.
Neden ?
Genel olarak yaşanılan sorunları iki ana başlıkta toplayalım ve detaylandıralım.
Karmaşık bileşen kodları
Basit bir Vue bileşeni yazarken Options Api bize çok pratik gelir. Fakat zaman içerisinde bileşenin kodlarının artması ile kod okumak ve mantığı anlamak kendi yazdığımız bölümlerde bile zor hale gelir. Eğer takım halinde çalışıyorsak bunu anlamak daha da zorlaşır. Bunun nedeni ise Options Api’ı bizi reactive değişkenleri(data), metotları(methods), hesaplanan değerleri(computed) vb. bir yerde yazmaya zorlamasıdır.
Ortak mantıkları ayırma ve yeniden kullanma sorunu
Bileşenler arasında ortak kullanılan mantıkları organize etmenin basit bir yolunun bulunmuyor olması da işleri karmaşık hale getiren bir diğer unsur. Bu konuda çözüm olması açısından mixinler bulunuyor olsa da mixinlerin sayısı arttıkça bileşenlerdeki tanımlamar ile çakışma/karışma durumları da artıyor. Mixinlerin yol açtığı diğer bir sorun ise, her defasında hangi mixinde neyin yer aldığına bakılması ihtiyacıdır. Buda geliştirme süresini etkilemektedir.
Vue 3 tasarlanırken bu sorunlara çözüm olarak ortaya Composition Api çıktı. Öncelikle üzerinde tartışılan ve tam olarak tamamlanmış bir yapı olmadığını hatırlatmakta fayda var.
Vue 2.x ile kullanabilmek için @vue/composition-api paketi bulunuyor. O zaman adım adım bir uygulama oluşturalım ve neler getiriyor bakalım.
İlk olarak eğer kurulu değil ise vue-cli aracını kurarak başlayalım.
1
npm install –g @vue/cli
Kurulum tamamlandıktan sonra bir Vue uygulaması oluşturalım.
1
vue create vue-composition-app
Şimdi vue-cli uygulama şablonunu oluşturup paketleri yükleyecek. Sıra geldi Composition Api’ı yüklemeye. Bunu da aşağıdaki komut ile yapıyoruz.
1
npm install @vue/composition-api
Artık kullanmaya hazırız. İlk olarak src altında yer alan main.js dosyamıza gidelim ve eklentimizi Vue’ya bildirelim.
reactive: Düz bir nesneyi reaktif bir nesneye dönüştürür.
ref: Bir özelliği reaktif hale getirmek için kullanıyoruz.
isRef: Bir özellik reaktif mi diye kontrol etmek için kullanıyoruz.
toRefs: Reaktif bir nesnenin özelliklerini birer reaktif özellik olarak alabilmemizi sağlar. Büyük reaktif nesneleri return ederken kullanışlıdır.
Api hakkında daha detaylı bilgiyi buradan alabilirsiniz.
Uygulanması
Aynı işlevin dağılmış parçaları birleştirelim ve birer fonksiyon haline getirelim. Örneğin ürün işlemlerinin özelliklerini, metotlarını, yaşam döngüsü metotlarını useProduct() fonksiyonu ile bir araya toplayalım. Bu sayede artık ürün işlemleri ile ilgili bir gözden geçirme yapacağımız zaman nereye bakmamız gerektiiğini kolayca anlayabiliriz. Daha sonra useProduct() metodununun return ettiklerini setup() içerisinden destructuring assignment ile alalım ve bizde setup() içerisinden Vue’nun kullanabilmesi için return edelim.
İşlevleri bir araya topladık ve artık ne için nereye bakmamız gerektiğini biliyoruz. Fakat bu örnek için hareketsizlik süresi izleme ve belirli bölümleri açıp kapatma işlevleri daha sonra uygulamanın diğer bölümlerinde de kullanılabilir gibi duruyor. O halde bu bölümleri farklı bir dosyaya çıkarmamız daha uygun olacaktır. Bu sayede ihtiyacımız olan parçaları diğer bileşenlerimizden de çağırabilir kullanabiliriz.
Burada benim izlediğim ve diğer okuduğum makalelerde de tercih edilen yöntem, bileşen ile sıkı sıkıya bağlı olan bölümlerin bileşen içerisinde bırakılması, tekrar kullanılabileceği öngörülen bölümlerin ayrı dosyaya çıkarılmasıdır.
Vue 2.x ile Composition Api ile yaşadığım deneyimi anlatmaya çalıştım. Tam olarak hangi şekilde uygulanması daha doğru olur gibi soruların net bir cevabı bulunmuyor. 2020 yılında Vue 3.0’ın yayınlanması ve kullanım oranının artması ile desenler daha belirgin hale gelecektir. Typescript için makale içerisinde kod örneği eklemedim. Fakat aşağıdaki bağlantıda verdiğim github deposunda her iki örneğin çalışır halini bulabilrisiniz. İyi çalışmalar diliyorum.