JavaScript

Alpine.js Nedir?

Bir web sitesi oluşturken ve bazı temel kullanıcı etkileşimlerini gerçekleştirmek için jQuery, Bootstrap, Vue.js veya React gibi frameworkler kullanırız. Alpine.js, bu frameworklerin boyutunun çok küçük bir kısmıdır çünkü hiçbir inşa adımı içermez ve temel bir kullanıcı arayüzü oluşturmak için ihtiyacınız olan tüm araçları sağlar.

Çoğu geliştirici gibi, iş akışımı aşırı karmaşıklaştırma konusunda kötü bir eğilimim var, özellikle de ufukta yeni bir heyecan varsa. CSS-in-JS kullanabiliyorsanız neden CSS kullanmalısınız? Gulp kullanabiliyorsanız neden Grunt kullanıyorsunuz? Webpack’i kullanabiliyorsanız neden Gulp kullanmalısınız? Başsız olabileceğiniz zaman neden geleneksel bir CMS kullanasınız? Yine de sık sık, yenilik hayatı kolaylaştırır.

Son zamanlarda, Tailwind CSS gibi yardımcı program tabanlı araçların yükselişi bunu CSS için yaptı ve şimdi Alpine.js, JavaScript için benzer bir şey vaat ediyor.

Bu yazıda, Alpine.js’ye ve etkileşimli web siteleri oluşturmak için JQuery veya daha büyük JavaScript kitaplıklarının yerine nasıl geçebileceğine daha yakından bakacağız. Kullanıcı etkileşimine dayalı olarak kullanıcı arayüzünü değiştirmek için düzenli olarak Javascript gerektiren siteler oluşturuyorsanız, bu yazıyı inceleyebilirsiniz.

Yazı boyunca Vue.js’ye atıfta bulunuyorum, ancak Vue deneyiminiz yoksa endişelenmeyin – bu gerekli değildir. Aslında, Alpine.js’yi harika yapan şeylerden biri, JavaScript’i neredeyse hiç bilmenize gerek kalmamasıdır.

Şimdi başlayalım.

Alpine.Js Nedir?

Tabs(Sekme) gibi temel bir kullanıcı arayüzü modelini ele alalım. Nihai hedefimiz, bir kullanıcı bir sekmeyi tıkladığında sekme içeriğinin görüntülenmesidir. Bir PHP arka planından geliyorsak, bu sunucu tarafını kolayca başarabiliriz. Ancak her sekme tıklamasında sayfa yenilemesi çok “reaktif” değildir.

Yıllar geçtikçe daha iyi bir deneyim oluşturmak için geliştiriciler jQuery veya Bootstrap ile bu işlemi gerçekleştirir. Bu durumda, sekmede bir olay dinleyicisi oluştururuz ve bir kullanıcı tıkladığında olay tetiklenir ve tarayıcıya ne yapması gerektiğini söyleriz.

Nasıl çalışıyor. Ancak tarayıcıya tam olarak ne yapacağını söylediğimiz bu kodlama tarzı (zorunlu kodlama) bizi çabucak ortalığı karıştırır. Düğmeye tıklandıktan sonra devre dışı bırakmak veya sayfanın arka plan rengini değiştirmek isteyip istemediğimizi düşünün. Hızlı bir şekilde ciddi bir spagetti koduna gireceğiz.

Geliştiriciler, Vue, Angular ve React gibi çerçevelere geçerek bu sorunu çözdüler. Bu çerçeveler, sanal DOM’u kullanarak daha temiz kod yazmamızı sağlar. Tarayıcı belleğinde depolanan kullanıcı arayüzünün bir tür aynasıdır. Sonuç, bu çerçevelerden birinde bir DOM öğesini (bir sekme gibi) “hide”; display:none; özelliği eklenmez gerçek DOM’dan çıkarır.

Bu, daha temiz ve okunması daha kolay olan daha açıklayıcı kod yazmamızı sağlar. Ama bunun bir bedeli var. Tipik olarak, bu çerçevelerin paket boyutu büyüktür ve bir jQuery arka planından gelenler için öğrenme eğrisi inanılmaz derecede zordur. Özellikle tek yapmak istediğiniz sekmeler arasında geçiş yapmak olduğunda! Ve işte burada Alpine.js devreye girer.

Vue ve React gibi, Alpine.js de bildirimsel kod yazmamıza izin verir, ancak “gerçek” DOM’u kullanır; Bir metin düzenleyicisini veya geliştirme araçlarını açtığımızda sizin ve benim düzenleyebileceğimiz aynı düğümlerin içeriğini ve niteliklerini değiştir. Sonuç olarak, daha büyük çerçevenin dosya boyutunu, sihirbazlığını ve bilişsel yükünü azaltır, ancak bildirimsel programlama metodolojisini koruyabilirsiniz. Ve bunu paketleyici, derleme süreci ve komut dosyası etiketi olmadan elde edersiniz. Sadece 6kb Alpine.js yükleyin ve işte buradasınız!

Alpine.jsJQueryVue.jsReact + React DOM
Kodlama stiliBildirgeZorunluBildirgeBildirge
Paketleyici gerektirirHayırHayırHayırEvet
Dosya boyutu (GZiplenmiş, küçültülmüş)6.4kb30kb32kb5kb – 36kb
Geliştirme AraçlarıHayırHayırEvetEvet

Alpine.js Ne Zaman Kullanmalıyım?

Benim için Alpine’ın gücü, DOM manipülasyonunun kolaylığında yatıyor. Bootstrap ile kutudan çıkardığınız şeyleri bir düşünün, Alpine.js onlar için harikadır. Örnekler şunlar olabilir:

  • Belirli koşullar altında DOM düğümlerini gösterme ve gizleme,
  • Kullanıcı girdisini bağlama,
  • Olayları dinlemek ve buna göre kullanıcı arayüzünü değiştirmek,
  • Eklenen sınıflar.

Verileriniz JSON’da mevcutsa şablon oluşturmak için Alpine.js’yi de kullanabilirsiniz, ancak bunu başka bir güne saklayalım.

Alpine.js Ne Zaman Kullanmamalıyım

Veri alıyorsanız veya doğrulama ya da veri depolama gibi ek işlevler gerçekleştirmeniz gerekiyorsa, muhtemelen başka bir yere bakmalısınız. Daha büyük çerçeveler, daha büyük kullanıcı arayüzleri oluştururken paha biçilmez olabilecek geliştirme araçlarıyla birlikte gelir.

jQuery’den Vue’ya ve Alpine’e

Alpine’nin sözdizimi neredeyse tamamen Vue.js’den alınmıştır. Toplamda 13 direktif var. Aşağıdaki örneklerde çoğunu ele alacağız.

Başlarken

Vue ve jQuery gibi, herhangi bir derleme işlemi gerekmez. Vue’dan farklı olarak, Alpine kendini başlatır, bu nedenle yeni bir örnek oluşturmaya gerek yoktur. Sadece Alpine’yi yükleyin ve hazırsınız.

Herhangi bir bileşenin kapsamı, x-data yönergesi kullanılarak bildirilir. Bu, her şeyi başlatır ve gerekirse bazı varsayılan değerleri ayarlar:

Kullanıcı Girişini Yakalama

x-model, herhangi bir girdi elemanını x-data kullanılarak ayarlanan değerlerle senkronize tutmamıza izin verir. Aşağıdaki örnekte, ad değerini boş bir dizeye (form etiketi içinde) ayarladık. x-model kullanarak bu değeri girdi alanına bağlarız. x-text kullanarak, değeri paragraf elemanının innerText’ine dahil ederiz.

Alpine.js, jQuery ve de Vue.js arasındaki farkları vurgulayalım.

JQuery’de paragraf etiketini güncellemek, belirli olayları dinlememizi (keyup?), Güncellemek istediğimiz düğümü ve yapmak istediğimiz değişiklikleri açıkça belirlememizi gerektirir. Alpine’nin sözdizimi ise ne olması gerektiğini belirtir. Bildirimsel programlama ile kastedilen budur.

Paragrafı Vue’da basitken güncellemek, yeni bir komut dosyası etiketi gerektirir:

Bu dünyanın sonu gibi görünmese de, Alpine ile ilk büyük kazancı vurguluyor. Bağlam değiştirme yoktur. Her şey orada HTML’de yapılır – herhangi bir ek JavaScript’e gerek yoktur.

Tıklama Olayları, Boolean Nitelikler ve Sınıflara Geçiş

Vue’da olduğu gibi x-bind (öznitelikleri bağlayan) için @ bir kısaltma işlevi vardır. @, x-on için kısaltmadır (bu, Alpine’ın olayları dinlemesi gerektiğini belirtir).

Aşağıdaki örnekte, x-data kullanarak yeni bir bileşen başlatıyoruz ve show’un varsayılan değerini false olarak ayarlıyoruz. Butona tıklandığında, gösterinin değerini değiştiririz. Bu değer doğru olduğunda, Alpine’e  aria-expanded özniteliği eklemesini söyleriz.

x-bind, sınıflar için farklı çalışır: anahtarın sınıf adı (bizim durumumuzda aktif) ve değerin bir boolean ifadesi (show) olduğu nesneyi iletiriz.

Gizle ve Göster

Gösterme ve gizleme sözdizimi neredeyse Vue ile aynıdır.

Bu, belirli bir DOM düğümünü display:none olarak ayarlar. Bir DOM öğesini tamamen kaldırmanız gerekirse, x-if kullanılabilir. Ancak, Alpine.js Sanal DOM’u kullanmadığından, x-if yalnızca bir (gizlemek istediğiniz öğeyi saran etiket) üzerinde kullanılabilir.

Sihirli Özellikler

Yukarıdaki yönergelere ek olarak, üç Büyü Özellikleri bazı ek işlevler sağlar. Bunların tümü, Vue.js’de çalışan herkese tanıdık gelecektir.

$el, kök bileşeni (x-data özniteliğine sahip olanı) getirir;
$refs, bir DOM öğesini almanıza izin verir;
$nextTick, ifadelerin yalnızca Alpine işini yaptıktan sonra çalıştırılmasını sağlar;
$event, bir doğal tarayıcı olayını yakalamak için kullanılabilir.

Yararlı Bir Şey Yapalım

Gerçek dünya için bir şeyler inşa etme zamanı. Kısa olması adına stiller için Bootstrap kullanacağım, ancak tüm JavaScript için Alpine.js kullanacağım. Oluşturmakta olduğumuz sayfa, bir form işleyiciye gönderen ve güzel bir başarı mesajı gösteren bir modal içinde görüntülenen bir iletişim formunun yer aldığı basit bir açılış sayfasıdır. Bir müşterinin hemen isteyebileceği ve bekleyebileceği türden bir şey olacak.

Bunun işe yaraması için jQuery ve Bootstrap.js ekleyebiliriz, ancak bu çok fazla işlevsellik için oldukça fazla ek yüktür. Muhtemelen Vanilla JS’de yazabiliriz, ama bunu kim yapmak ister? Bunun yerine Alpine.js ile çalışmasını sağlayalım.

İlk olarak, bir kapsam ve bazı başlangıç değerleri belirleyelim:

Şimdi, buton ile showModal değerini true olarak ayarlamasını sağlayalım:

ShowModal true olduğunda, modal’ı görüntülememiz ve bazı sınıflar eklememiz gerekir:

Girdi değerlerini Alpine’a bağlayalım:

Ve şu değerler ayarlanana kadar “Kaydet” butonunu devre dışı bırakın:

Son olarak, verileri bir tür eşzamansız işleve gönderelim ve işimiz bittiğinde modu gizleyelim:

Ve işte bu kadar!

Web siteleri oluştururken, giderek artan bir şekilde kendime “yeteri kadar JavaScript” ne olurdu diye sormaya çalışıyorum. Gelişmiş bir web uygulaması oluştururken, bu pekala React olabilir. Ancak bir pazarlama sitesi veya benzer bir şey oluştururken, Alpine.js yeterli geliyor. (Öyle olmasa bile, benzer sözdizimi verildiğinde, Vue.js’ye geçmek hiç zaman almaz).

Kullanımı inanılmaz derecede kolaydır (özellikle VueJS’yi hiç kullanmadıysanız). Küçük (gzip ile <6kb sıkıştırılmış). Ve bu, HTML ve JavaScript dosyaları arasında artık bağlam geçişi olmadığı anlamına gelir.

Yorum Yap

Yorum yapmak için tıklayın