Yayın: 8 Mayıs 2024
Web sitemde bu konu hakkında birçok gönderi olduğumu göz önüne alarak Svelte ve SvelteKit'i ne kadar sevdiğimi görebilirsiniz. İnternette Svelte diğer frameworklerle karşılaştırıldığında - haksız yere - nispeten yeni olduğu için community desteği eksik olduğu belirtilir.
Bu harika framework'e olan görevim olarak, topluluğunu genişletmeye ve deneme yanılma yoluyla edindiğim bilgileri yeni gelenlerle paylaşmaya karar verdim.
Bu yazıda, Svelte'de reaktivite konusunu ele alalım.
Bazen bir değişkenin değişikliği DOM'da bir değişikliğe neden olmaz ve Svelte'in reaktivitesi nasıl gerçekleştiği konusunda bazı belirsizlikler vardır. Bu yüzden derine inelim.
Aşağıdaki ayarlamaya sahip olduğunuzu düşünün ve kullanıcı adının aşağıdaki gibi yansıtılması gerektiğini düşünün:
Bunu Svelte'de binding kullanarak kolayca elde edebilirsiniz.
Girişin değeri aşağıdaki gibi name değişkenine bağlanabilir ve bu, DOM öğesinin her zaman giriş değeriyle senkronize olacağı anlamına gelir.
<script>
let name = 'Kepler';
</script>
<input bind:value={name} />
<h1>Welcome {name}</h1>
Şimdi bu beklendiği gibi çalışıp çalışmadığını görelim:
Evet! Bu Svelte'de reaktiviteyi sağlamanın en zarif yolu olmasına rağmen, konu hakkında tam bir anlayış elde etmek için diğer seçenekleri keşfetmekte fayda var.
Bunu başka bir değer atama yöntemiyle de elde edebilirsiniz.
Bir değişkene değer script bölümünde atandığında, bu reaktif hale gelir. Bağlama etkisi, değer atama aracılığıyla, elbette zarif olmasa da, elde edilebilir.
<script>
let name = 'Copernicus';
</script>
<input on:change={(e) => (name = e.currentTarget.value)} value={name}/>
<h1>Welcome {name}</h1>
Yukarıdaki kod aşağıdaki gibi çalışır: Girişin değeri değiştiğinde, bir değişiklik olayı tetiklenir. Event tetiklendikten sonra, name değişkeni olayın tetiklediği değere atanır. name değişkenini script bölümünde tanımladığımızdan, reaktif hale gelir. Dolayısıyla, bu değişkende herhangi bir değişiklik, ilgili DOM öğesinin yeniden render edilmesini tetikler. Beklendiği gibi çalışıp çalışmadığını görelim:
Yazarken reaktivite yalnızca tamamlandığında görülür. Yazarken reaktiviteyi görmüyoruz. Bunu yapmak için, change olayının input olayına dönüştürülmesi gerekir:
<script>
let name = 'Newton';
</script>
<input on:input={(e) => (name = e.currentTarget.value)} value={name}/>
<h1>Welcome {name}</h1>
Yukarıdaki kodla, yazarken reaktivite sağlanabilir:
Şimdiye kadar öğrendiğimiz kadarıyla, bir değişkenin script etiketleri içinde bildirilmesi durumunda, reaktif olacaktır. Yani, değerindeki değişiklikler DOM'da yansıtılacaktır.
Ancak, kuralın bir istisnası her zaman vardır.
Bir değişken, başka bir değişkenden türetilmiş olarak bildirilirse, DOM'da bir değişiklik olsa bile reaktif olmayacaktır, ve başlangıçta bildirilen değer reaktif de olsa. Bunun aşağıdaki eylemde nasıl gerçekleştiğini görelim:
<script>
let name = 'Einstein';
let welcomeMessage = `Hello ${name}`;
</script>
<input bind:value={name} />
<h1>{wolcomeMessage}</h1>
Yukarıdaki kodda, name değişkeni her zamanki gibi reaktiftir. Ancak, ondan yeni bir değişken olan welcomeMessage türetiliyor.
Bunu çalışıp çalışmayacağını görelim:
Yukarıda belirtildiği gibi, reaktivite burada çalışmayacaktır ve welcomeMessage, girişi değiştirdiğimizde bile "Welcome Einstein" olarak kalacaktır. Bunun nedeni, script etiketleri arasındaki alanın bileşen render edildiğinde yalnızca bir kez çalıştırılmasıdır. Bu nedenle, welcomeMessage "Welcome Einstein" olarak başlatılır ve ilk render işleminden sonra name değişkenine olan tüm bağlantısını bırakır.
Karmaşık uygulamalarda, türetilmiş değişkenlere sahip olacağımızdan eminiz, bu tür değişkenleri nasıl reaktif hale getirebiliriz?
Türetilmiş değişkenin önüne bir $ (dolar) işareti ekleyerek, onu reaktif hale getirmek mümkündür. Bu şekilde, svelte bu değişkeni takip edecek ve değiştiğinde değişikliğin DOM'da yansıtılmasını sağlayacaktır.
Bunu aşağıdaki gibi elde edilir:
<script>
let name = 'Stephen';
$: welcomeMessage = `Hello ${name}`;
</script>
<input bind:value={name} />
<h1>{wolcomeMessage}</h1>
Bunun çalışıp çalışmayacağını görelim:
Evet! Bu nedenle, bir değişkenin başka bir değişkenden türetilmiş olduğu durumlarda, reaktif olması için $ (dolar) işaretini kullanmayı unutmayın. Bu sözdiziminden hoşlanmazsanız, reaktiviteyi sağlamanın başka bir yol daha vardır.
Reaktif hale getirmek istediğiniz bölümü key etiketleri içine ekleyerek, $ (dolar) işareti olmadan da reaktiviteyi sağlayabilirsiniz. Sözdizimi aşağıdaki gibi:
<script>
let name = 'Carl';
let welcomeMessage = `Hello ${name}`;
</script>
<input bind:value={name} />
{#key name}
<h1>{wolcomeMessage}</h1>
{/key}
key yanına yazılan değişken, sveltin takip etmesini istediğiniz değişkendir. Bu durumda, ona name değişkenini takip etmesini söylüyoruz. Ancak, ona welcomeMessage değişkenini takip etmesini de isteyebilirsiniz ve bu da sorunsuz çalışmalıdır.
Bu yazıda, svelte'deki reaktiviteyi inceledik. Başlıca konular şunlardır:
Ayrıca, türetilmiş değişkenlerin svelte'te izlenmediğini ve onlara yapılan değişikliklerin DOM'da yansıtılmayacağını öğrendik. Bu değişkenleri reaktif hale getirmenin 2 yolunu inceledik:
Svelte, en iyi front-end framework'tur ve reaktivitesi, bu harika framework'un neden olduğu başlıca nedenlerden biridir. Umarım bu yazıyla Svelte'deki reaktivite anlayışınızı derinleştirebilmişimdir.
Herhangi bir sorunuz varsa bana bildirin.
Keyifli kodlamalar!
Bu blog İngilizce'den ChatGPT ile çevrilmiştir. Herhangi bir belirsizlik durumunda İletişim sayfasından bana ulaşabilirsiniz.
Yorum bırak
Yorumlar
Diğer bloglara bak
2024/06/19
Svelte ve JavaScript ile Basit ve Dinamik Bir Tooltip Yaratma Yöntemi
2024/06/17
JavaScript ile Tokyo'nun İnteraktif Haritasını Oluşturun
2024/06/14
Matplotlib'de Japonca Karakter Sorununu Çözme Yöntemi
2024/06/13
Kitap İncelemesi | Ötekiyle Konuşmak by Malcolm Gladwell
2024/06/07
Japonca'da En Sık Kullanılan 3.000 Kanji
2024/06/07
VSCode'da Regex Kullanarak Replace Yapma Yöntemi
2024/06/06
Svelte'de Readable Store Kullanmayın
2024/06/05
Dosyaları Gzip ve Pako ile Sıkıştırarak Web Sitesinin Yükleme Hızını Artırın
2024/05/31
Web Sayfasında Farenin Uzerinde Oldugu Kelimeyi JavaScript ile Bulun
2024/05/29
Svelte ve SVG ile Interaktif Harita Oluşturun
2024/05/28
Kitap İncelemesi | Geleneklere Uymayanlar Dünyayı Nasıl İleri Taşıyor? by Adam Grant & Sheryl Sandberg
2024/05/27
Javascript Kullanarak Sudoku Nasıl Çözülür?
2024/05/26
Web Siteme Gelen Trafiği Bir Ayda Nasıl 10 Kat Artırdım?
2024/05/24
Hayat Bisiklet Sürmek Gibidir
2024/05/19
JavaScript'te Backtracking Algoritması ile Tamamlanmış Sudoku Oluşturun
2024/05/16
Tailwind Neden Harikadır ve Web Geliştirmeyi Nasıl Kolay Hale Getirir?
2024/05/15
Python ve Git Hooks ile Otomatik Olarak Site Haritası Oluşturma
2024/05/14
Kitap İncelemesi | Çok Yönlü - Başarı İçin Neden Çok Şeyle İlgilenmeliyiz? by David Epstein
2024/05/13
Svelte ve SvelteKit nedir?
2024/05/12
SvelteKit ile Internationalization (Çoklu Dil Desteği)
2024/05/11
Svelte'de Caching ile Deploy Süresini Azaltın
2024/05/10
Svelte ve Intersection Oberver ile Lazy-Load
2024/05/10
Genetik Algoritma İle Hisse Senedi Portföyü Optimizasyonu
2024/05/09
ShapeFile Formatini SVG Formatina Degistirme Yontemi
2024/05/07
Kitap İncelemesi | Savaş Sanatı - Sun Tzu
2024/05/06
Specialistlik Bitti. Yaşasın Generalistlik!
2024/05/03
2018 Milletvekili Seçimlerinde Yaşa Göre Parti Eğilimi
2024/05/01
Python Selenium Ile Secmen Veritabani Olusturma
2024/04/30
Svelte ve Tailwind Ile Infinite Scroll Yapma Yontemi
2024/04/29
1 Yıl İçerisinde Japonca Konuşabilmek
2024/04/25
Svelte ve Tailwind ile Kullanıma Hazır Web Sitesi Şablonu
2024/01/29
Tembel Muhendisler Kotu Urunler Yapar
2024/01/28
Mukemmellik Uzerine
2024/01/28
MacBook'ta PDF'i PNG'ye Cevirme Yontemi
2023/12/31
2023'u Kapatiyoruz: Bu Yil Okunan 24 Kitap
2023/12/30
Python PIL Kullarak Foto Kolaji Yapma Yontemi
2024/01/09
Site Ziyaretcilerinin Alet ve Tarayicilarini Tespit Etme Yontemi
2024/01/19
ChatGPT Cevap Anatomisi