Redux Selector'ları, modern web uygulamalarının veri yönetimindeki karmaşıklığı çözmek için kullanılan önemli bir araçtır Bu fonksiyonlar, Redux store'undaki belirli veri kısımlarını seçmek, filtrelemek ve yeniden düzenlemek için kullanılır Selector'lar, React uygulamalarında da yaygın olarak kullanılır ve uygulamanın performansını artırırken kod okunabilirliğini ve tekrar kullanılabilirliğini de sağlar Performans artışı sağlamak için Redux Selector'ları ile birlikte memoization fonksiyonlarının kullanımı önerilir Kod okunabilirliğini artırmak için de uygulama içinde aynı kodun defalarca yazılmasını önlemek amacıyla Selector'lar kullanılabilir Bu nedenle, Redux Selector'larının kullanımı, Redux uygulamalarındaki veri erişimindeki performans artışı, kod optimizasyonu ve okunabilirlik gibi önemli avantajları nedeniyle büyük önem taşır

Redux, modern web uygulamalarının en büyük sorunlarından biri olan, veri yönetimindeki karmaşayı çözen bir JavaScript kütüphanesidir. Redux'un Selector'ları ise veri yönetimindeki sıkıntıları daha da azaltmak için kullanılan önemli bir araçtır. Selector'lar Redux ile birlikte kullanıldığı zaman, uygulamaların performansını artırır ve kod okunabilirliği ile tekrar kullanılabilirliğini sağlar. Bu sebeple Selector'ların kullanımı önemlidir.
Selector'lar, Redux'un store’unun belirli kısımlarındaki verileri seçmek, filtrelemek ve yeniden düzenlemek için kullanılır. Bu işlemler sıklıkla uygulanır ve her seferinde yeniden hesaplanması zaman alır. Bu nedenle, Selector'lar uygulamalarda performans artışı sağlar. Bunun yanı sıra kodların okunabilirliği de artar. Böylece uygulama geliştirme süreci daha da hızlanır ve daha az hataya neden olur. Son olarak, Selector'ların tekrar kullanılabilirliği, kodların daha modüler olmasına yardımcı olur ve zaman ve çaba tasarrufu sağlar.
Selector'ların Redux ile birlikte kullanımı oldukça kolaydır ve React uygulamalarında da yaygın olarak kullanılır. Redux’ta Selector'ların kullanımı, uygulama geliştirme sürecinde hızlı ve etkili veri yönetimini sağlar. Ayrıca, Selector'lar doğru bir şekilde tasarlandıklarında, uygulamanın performansını önemli ölçüde artırabilir.
Selector Nedir?
Selector, Redux uygulamasında state'in bir parçasını seçmek için kullanılan bir fonksiyondur. Bu fonksiyon, state ağacındaki belirli bir düğümü seçebilir ve uygulamanın farklı kısımlarında bu düğüme erişmek için kullanılabilir. Bu, Redux'da kullanılabilen en önemli araçlardan biridir, çünkü uygulama içindeki belirli bir veri kümesine hızla erişmek için oldukça kullanışlıdır.
Selector, işlevsel bir programlama anlayışına dayanmaktadır. Basitçe söylemek gerekirse, bir selector, belirli bir veri kümesini hesaplamak için farklı veri kümelerini bir araya getirir. Bu hesaplamaları saklar ve gerektiğinde yeniden kullanır. Selector, verilerin daha karmaşık bir şekilde düzenlenmesini sağlar ve uygulama için daha net ve anlaşılır bir veri akışı oluşturur.
Redux’ta Selectorların Önemi
Redux, genellikle büyük boyutlu ve karmaşık uygulamaların yönetildiği bir durum yöneticisi olarak kullanılır. Bu durumda, bir uygulamanın performansı, kod okunabilirliği ve yeniden kullanılabilirliği önemlidir. Selectorlar, Redux'ta tekrar kullanılabilir, birçok bileşenden veri alabilen ve daha iyi performans sunan fonksiyonlardır.
Selectorlar, Redux uygulamalarında birçok avantaja sahiptir. Öncelikle, performans artışı sağlarlar. Bir reducer değiştiğinde, tüm bileşenler yeniden render edilir. Ancak, selectorlar sadece ilgili değişiklikler için yeniden hesaplandığından, yeniden render etmek gerekmez. Bu performans artışı sağlar.
Ayrıca, kodların okunabilirliğini artırırlar. Selectorlar, uygulamanın her yerinde kullanılabilir, aynı kodu defalarca yazmanıza gerek yoktur. Böylece, kod okunabilirliği ve bakımı kolaylaşır.
Selectorlar, kodların tekrar kullanılabilirliğini de artırır. Veritabanı trafiği, saga gibi tekrar kullanılabilecek kodları yazarken faydalıdırlar. Ayrıca, kodların modülerliği için de faydalıdırlar.
Avantajları | Neden Önemlidir? |
---|---|
Performans artışı sağlar | Bir uygulamanın performansı için kritik unsurlardandır |
Kodların okunabilirliğini artırır | Kod bakımını ve geliştirmeyi kolaylaştırır |
Kodların tekrar kullanılabilirliğini artırır | Kodların yeniden kullanılabilirliğini ve modülerliğini artırır |
Performans Artışı
Selectorlar, Redux uygulamalarındaki veri erişiminde büyük bir performans artışı sağlar. Bunun nedeni, selectorların verileri önbelleğe alması ve yalnızca değiştiğinde güncellemesi gerektiğidir. Yani, bir selector çağrıldığında, ilgili veriler önbellekten alınır ve eğer değişmediyse, eski veri kullanılır.
Selectorlar, performans artışının yanı sıra, kodlarınızı da daha okunaklı hale getirmeye yardımcı olur. Ayrıca, componentlerinizle doğrudan bağlantılı olan verileri bir selector'a taşımak, kodunuzda daha az tekrarlamaya neden olur.
Performans artışı için başka bir seçenek, memoization fonksiyonlarını kullanmaktır. Memoization, daha önce yapılan işlemlerin önbelleğe alınmasını ve yeniden hesaplanmadan sonuçların kullanılmasını sağlar. Bununla birlikte, selectorlar memoization'u yalnızca değişim olmadığı zamanlarda yapar ve daha verimli bir şekilde kullanır.
Performans Artışı için Diğer Yöntemler |
---|
Verileri mümkün olduğunca küçük tutun |
Performansı artırmak için React memoization kullanın |
Kod optimizasyonu ve sıkıştırma işlemleriyle dosya boyutunu küçültün |
Yukarıdaki yöntemlerin yanı sıra, kodunuzun karmaşıklığını azaltarak ve performansı artırarak kod yazmak da mümkündür. Ancak, selectorları kullanmak daha spesifik bir yöntemdir ve Redux uygulamalarında veri erişiminde önemli bir yer tutar.
Kod Okunabilirliği
Kod okunabilirliği, bir uygulamanın bakımını daha kolay ve hızlı hale getirmek adına oldukça önemlidir. Redux uygulamalarında selectorların kullanımı, kodların daha okunaklı hale gelmesine yardımcı olur. Selectorlar, kodların doğru bir şekilde organize edilmesine ve daha kolay anlaşılmasına yardımcı olur.
Selectorlar, verileri dönüştürmeye ve filtrelemeye yardımcı olarak, kodun daha okunaklı hale gelmesini sağlar. Bunun yanı sıra, selectorların kullanımı, kod tekrarlarını da önler. Kod tekrarları koda karmaşıklık ve anlaşılamazlık katar. Ancak, selectorlar, kod tekrarlarını ortadan kaldırarak, kodun daha düzenli ve okunaklı hale gelmesine yardımcı olur.
Kodlarının daha okunaklı hale gelmesi için birkaç ipucu şöyle sıralanabilir:
- Kodlar, belirli bir standart takip ederek yazılmalıdır. Bu, kodların daha anlaşılır olmasını sağlar.
- Kodlarda yorum satırları kullanılmalıdır. Bu, kodun ne işe yaradığını anlamak için faydalıdır.
- Kodlarda indentasyon kullanılmalıdır. Bu, kodun daha düzenli ve okunaklı hale gelmesine yardımcı olur.
Selectorlar, kodların daha okunaklı hale gelmesine yardımcı olurken, kodların anlaşılır olması için bu ipuçlarının da dikkate alınması gereklidir.
Kodların Tekrar Kullanılabilirliği
Selectorlar, kodların tekrar kullanılabilirliğini artırmak için değerli bir araçtır. Kodların belirli parçalarını biraraya getirerek, tek bir yere yerleştirir ve bu parçaların farklı yerlerde tekrar tekrar kullanılmasını sağlarlar. Modüler bir tasarım yaklaşımı olarak bilinen bu yöntem, kodların okunmasını, bakımını ve genişletilmesini daha kolay hale getirir.
Bir Selector, işlevsellik açısından tek bir noktada toplanan kodu sağlar. Örneğin, bir e-ticaret uygulamasını ele alalım. Bu uygulamanın bir sayfasında bir ürün listesi olabilir. Aynı ürünlerin başka bir sayfada da listelendiğini varsayalım. Ürün bilgilerinin yüzlerce, hatta binlerce kez tekrarlanması, uygulamanın performansını düşürebilir. Bunu önlemenin yolu, seçiciler vasıtasıyla tekrar eden kod bloklarının özetlenmesidir.
Kod Örnekleri | Selector Kullanarak Tekrar Kullanılabilirliği Artırmak |
---|---|
const itemName = cart.itemSelectedName;const itemPrice = cart.itemSelectedPrice;const itemDescription = cart.itemSelectedDescription; | const selectedItem = selectSelectedCartItem(state);const itemName = selectedItem.name;const itemPrice = selectedItem.price;const itemDescription = selectedItem.description; |
Bu örnekte, sepet öğelerinin adı, fiyatı ve açıklaması okunuyor. İlk örnekte, bu bilgiler doğrudan çizgilere yazılıyor. Ancak, seçici kullanarak, bu bilgileri daha okunaklı bir hale getirebiliriz. Bu seçici, öğeleri sorgulamak için önceden tanımlanmış bir işlevdir ve tekrar kullanılabilirliği arttırır.
Bir Selector, özellikle büyük projelerde, kodların yüzlerce farklı yerde kullanıldığı durumlarda yararlı olabilir. Bu tür bir durumda, değiştirilecek bir şey olduğunda uygun bir Selector kullandığınızda, değişiklik hızlıca yapılabilecektir. Bu, program kararlığını artırır ve kodun daha kolay yönetilebilmesini sağlar.
Redux Selector’ları Nasıl Yazılır?
Redux selectorları nasıl yazılacağına bakmadan önce, bu kavramın ne olduğunu ve Redux uygulamalarında neden önemli olduğunu anlamamız gerekiyor. Selector, Redux'un temel özelliklerinden biridir ve birçok faydası vardır.
Selectorlar, state ağaçlarından verileri çekmek ve onları birleştirmek için kullanılır. Bu, uygulamalarda daha az kod yazmayı ve daha az tekrar etmeyi sağlar. Ayrıca kodun okunabilirliğini artırır ve geliştirme sürecini hızlandırır.
Bir örnek selector yazımını görmek için şöyle denebilir: verilen bir state tanımı ve işlevin, bir liste döndüren bir selector yazılabilir. Bu listelemiş işlevi, Redux store'unda (yerel veya uzak bir kaynaktan da olabilir) bulunan kaynaklardan alınan bilgilerle doldurup, web uygulamasında kullanılabilir bir veri seti haline getirir. Bu örnekte, bir state ağacındaki verilerin ayrıştırılması ve yorumlanması için gerekli olan işlevsellik için bir fonksiyon gereklidir.
Bir selector yazarken dikkate alınması gereken önemli noktalar şunlardır:
- Selector işlevi, pure veya kirlilik açısından sınıflandırılmalıdır. Pure, global ve değişmez kaynaklardan elde edilen bilgileri kullanırken, kirli selector, dış bağımlılıklara sahip ve her zaman aynı verileri döndürmez.
- Selectorların mantıksal yapısı ileri ve okunması kolay olmalıdır.
- Select içinde yine bir selector kullanarak kodu daha fazla organize edebilirsiniz. Kendinize tekrar kod yazdırmamış ve eksik kodlamaların önüne geçebilirsiniz.
Selector'ların yazımı sürecinde dikkat edilmesi gereken bir diğer unsur da, "createSelector" kütüphanesinin kullanımıdır. Bu kütüphane, performansı optimize etmek için önbelleklemeyi sağlar. Bu önbellekleme, bir selectora bağlı state parçaları değişmediyse, eski sonucu tekrar kullanarak işlem sayısını ve işlem yükünü azaltmaya çalışır. Bu şekilde, uygulamanın performansı artırılmış olur.
Selector Fonksiyonu Yazımı
Redux uygulamalarında selector fonksiyonları, belirli bir durum ağacındaki stateleri seçmek için kullanılır. Selector fonksiyonlarının temel formülü şöyledir:
```const selectorFunction = (state) => { // return selected data from state};```
Bu fonksiyon, uygulamadaki ilgili durum ağacından bilgileri seçer ve döndürür. Selector fonksiyonu, genellikle bağımsız bir modül olarak yazılır ve tek bir dosyada birden fazla selector fonksiyonu bulunabilir.
Selector fonksiyonlarının özellikleri, Redux'taki state ağacındaki verilere göre değişebilir. Tipik olarak, bir selector fonksiyonunun çalışma mantığı, bir ya da daha fazla state özelliği üzerine filtreleme ve işleme yapmaktır. Örneğin, bir "todos" state özelliği içerisinde "completed" özelliği true olan tüm todo'ları getirmek isteyebilirsiniz. Bu durumda, bir selector fonksiyonu aşağıdaki şekilde yazılabilir:
```const getCompletedTodos = (state) => state.todos.filter(todo => todo.completed);```
Selector fonksiyonları, özellikle büyük uygulamalarda çok yararlıdır. Bu fonksiyonları kullanarak, bir uygulamanın performansı arttırılabilir ve kodun okunabilirliği arttırılabilir. Gelecek nesil API'lar (Örn. serviceWorker) de, selector fonksiyonlarından yararlanarak uygulamanın performansını arttırmak için kullanılabilir.
createSelector Kullanımı
Redux uygulamalarında performansı artırmak için kullanılan Reselect kütüphanesi sayesinde selector fonksiyonları daha da kuvvetli hale getirilebilir. Reselect kütüphanesinin kullanımı oldukça basittir. Öncelikle, projemize reselect kütüphanesini yüklememiz gerekir. Bunun için terminal/komut satırına aşağıdaki kodu yazabiliriz:
npm install reselect
Reselect kütüphanesinin en güzel yanı, selector fonksiyonlarından yeni bir selector fonksiyonu oluşturabilme özelliğidir. Yeni oluşturulan fonksiyonlar, bellek içerisinde önbellek tutar ve gereksiz hesaplamaların önüne geçer.
createSelector fonksiyonu, bir veya daha fazla selector fonksiyonunu alır ve sonuç olarak yeni bir selector fonksiyonu döndürür. Örnek olarak, aşağıdaki kod bloğu 2 adet selector fonksiyonunu aldıktan sonra, yeni bir selector fonksiyonu oluşturur:
import { createSelector } from 'reselect';const selectCart = state => state.cart;const selectUser = state => state.user;export const selectCurrentUserCart = createSelector( [selectCart, selectUser], (cart, user) => { return cart.filter(item => { return item.userId === user.id; }); });
Yukarıdaki örnekte, ilk başta Redux store’dan 'cart' ve 'user' durumlarını seçiyoruz. Daha sonra, bir filtre uygulayarak sadece 'user' ile eşleşen kart öğelerini döndürüyoruz.
Bu yöntem sayesinde, bellek içerisindeki önbellek sayesinde, 2 önceden hesaplanmış giriş değerini kullanarak çok daha hızlı bir şekilde sonuç alırız. Bu aynı zamanda, gereksiz hesaplamaları önleyerek performansı arttırır.
Selector’ların React Uygulamalarında Kullanımı
React uygulamalarında, Selector’ları React componentlerinde mapStateToProps ile kullanarak entegre edebiliriz. Selector’ların kullanımı, uygulamanın performansını artırır, kodların okunabilirliğini sağlar ve yeniden kullanılabilirliği artırır. Ayrıca, React Redux’ta, useSelector hook’u ve getSelectors beta özelliği de Selector’ları kullanmayı kolaylaştırmaktadır.Bir örnek uygulama için, bir React componenti içinde bir Selector kullanabiliriz. Örneğin, bir e-ticaret sitesindeki Sepet componenti için, ürün fiyatlarının toplamını hesaplamak için bir Selector fonksiyonu yazabiliriz. Bu Selector, Redux store’daki ürünler listesine ve sepetteki ürünler listesine dayanarak ürün fiyatlarının toplamını hesaplar. Daha sonra, Sepet componentinde mapStateToProps ile bu Selector’u kullanabiliriz.Aşağıdaki örnek kod Sepet componenti için bir Selector fonksiyonu içermektedir:```const calculateTotalPrice = (products, cartItems) => { let total = 0; cartItems.forEach(item => { const product = products.find(product => product.id === item.productId); total += product.price * item.quantity; }); return total;};const mapStateToProps = state => { const totalPrice = calculateTotalPrice(state.products, state.cartItems); return { totalPrice };};const Sepet = ({ totalPrice }) => { return (Toplam Fiyat: {totalPrice} TL
- {cartItems.map(item => (
- {item.name} - {item.quantity} adet ))}
Örnek Uygulama
Redux uygulamalarında selector kullanarak, gereksiz render işlemlerinden kaçınabiliriz. Bir uygulamada, sadece belli bir kısım değiştiğinde bunun yeniden render edilmesi gerektiğini belirtebiliriz. Aynı zamanda, kodumuzun modüler olmasını sağlayarak, tekrar kullanılabilirliğini de artırabiliriz.
Bir örnek işlevsel React bileşeni yazarsak, bu bileşen her seferinde yeniden render edilirse, performans sorunlarına neden olabilir. Bu nedenle, bir selector kullanarak yalnızca component'in gerektiğinde yeniden render edilmesini sağlayabiliriz.
Örneğin, bir e-ticaret uygulamasında, ürün bilgilerinin ve sepetteki ürünlerin gösterildiği bir componentimiz olduğunu varsayalım. Sepet değiştiğinde, ürün bilgileri değişmese bile component yeniden render edilir ve performans sorunlarına neden olur.
Bunun yerine, bir selector kullanarak, sadece sepet değiştiğinde bu component'in yeniden render edilmesini sağlayabiliriz. Böylece, gereksiz render işlemlerinden kaçınırız ve uygulamanın performansını artırırız.
Yararları Nelerdir?
React uygulamalarında Selector kullanmanın birçok yararı bulunuyor. İşte bunlardan bazıları:
- Kod okunabilirliğini artırır: Selectorlar, kodların daha okunaklı hale gelmesini sağlar. Bu sayede, kodlarda yapılan değişiklikler daha hızlı bir şekilde takip edilebilir.
- Performansı artırır: Selectorlar, verilerin güncellenmesi üzerine çalıştığından, gereksiz yeniden hesaplamalar yapılmadan performans artışı sağlar.
- Kod tekrar kullanılabilirliğini artırır: Selectorlar, farklı componentler arasında ortak kullanılabilecek kodların modüler bir şekilde yazılmasını sağlar. Bu sayede, aynı kodları farklı yerlerde tekrar tekrar yazmak yerine, tek bir yerde yazıp kullanabilirsiniz.
Bunların yanı sıra, Selector kullanarak kodlarınızın daha organize ve sürdürülebilir olmasını sağlayabilirsiniz. Özellikle büyük ölçekli React uygulamalarında Selector kullanmak, kodların daha kolay yönetilebilir hale gelmesini sağlar.