Redux Persist, Redux kullanan React uygulamalarında durum yönetiminin en önemli sorunlarından birini çözer: sayfa yenilendiğinde veya uygulama yeniden açıldığında Redux store’unun sıfırlanmasını engellemek. Bu rehberde Redux Persist’in ne olduğunu, neden kullanıldığını ve ReactJS üzerinden adım adım nasıl uygulandığını açıklıyoruz.
Not: Bu anlatım ReactJS üzerinden yapılacaktır.
İçindekiler
Redux kullandığımız uygulamalarda sayfa değiştiğinde, yenilendiğinde veya uygulama kapatılıp tekrar açıldığında, Redux’taki değişkenlerin tekrar eski haline dönmesi veya sıfırlanması sebebiyle bu değişkenlere ulaşamayız. Bu yüzden sayfa yenilendiğinde tekrar istek atılır ve değişkenler yeniden setlenir. Özellikle servisten gelen sabit objeler veya array’lerde bu can sıkıcı hale gelir — çünkü tekrar servise istek atılıp değişken yeniden setlenmek zorunda kalınır.
Bu problemi somutlaştırmak için bir örneğe bakalım: Login sayfamızı reducer’a yazdığımız loginState adında boolean bir değişkene bağladığımızı düşünelim.
loginState
Bu değişken true olduğunda login sayfası, false ise dashboard sayfası gözükecektir.
true
false
Redux Persist kullanmadığımızda sayfa her yenilendiğinde reducer sıfırlanacak, loginState eski haline dönecek yani true olacak ve login sayfası tekrar gözükecektir. Daha önceden giriş yapmış olmamıza rağmen tekrar login ekranıyla karşılaşırız.
Ancak Redux Persist kullanıldığında böyle bir durum yaşanmayacak; loginState‘i true‘ya setlemediğimiz sürece login sayfası gözükmeyecektir.
Redux Persist, Redux’taki değişkenlerin sayfa yenilendiğinde, değiştiğinde veya uygulama kapatılıp tekrar açıldığında sıfırlanmasını engelleyen; bu değişkenleri localStorage‘da saklayan bir pakettir. Temel çalışma prensibi şudur: uygulama her açıldığında Redux store’u localStorage’dan yeniden yüklenir (rehydrate) ve kullanıcı bıraktığı yerden devam edebilir.
Uygulamada hangi reducer’ların persist edileceğini whitelist ile belirleyebilir, persist edilmesini istemediklerinizi ise blacklist ile dışarıda bırakabilirsiniz. Eğer hiçbir ekleme yapmazsanız reducer’daki tüm değişkenler localStorage’a kaydedilir.
Aşağıdaki paketlerin kurulması gerekmektedir:
TERMINAL
npm i redux npm i react-redux npm i redux-persist npm i reselect
Kuracak olduğumuz Redux ile index.js ve App.js dosyalama yapısı şu şekilde olacak:
index.js
App.js
Adım 1: Action’daki set fonksiyonu için constant bir değer tanımlayalım.
Adım 2: action.js dosyasında set fonksiyonumuzu tanımlayalım.
action.js
Adım 3: Reducer dosyasını oluşturalım ve değişkenimizi tanımlayalım.
Adım 4: selector.js‘ten loginState için bir select fonksiyonu yazalım.
selector.js
Adım 5: index.js dosyamızı oluşturalım. Eğer bir servise istek atılacak ve saga kullanılacaksa aşağıdaki kod satırlarında yorum satırı yapılan satırları aktif hale getirebilirsiniz. Whitelist’e sürekli kaydedilmesini istediğiniz değişkenleri, blacklist’e ise kaydedilmesini istemediklerinizi ekleyin.
Redux Persist’in en önemli özelliklerinden biri, hangi reducer’ların localStorage’a kaydedileceğini kontrol edebilmenizdir. Bu kontrol iki yöntemle sağlanır:
Whitelist: Yalnızca listede belirttiğiniz reducer’lar persist edilir. Diğer tüm reducer’lar her sayfa yenilenmesinde sıfırlanır. Bu yöntem, hangi verilerin kalıcı olacağını kesin olarak kontrol etmek istediğinizde idealdir.
Blacklist: Listede belirttiğiniz reducer’lar persist edilmez; geri kalanların tamamı kaydedilir. Persist edilmesini kesinlikle istemediğiniz hassas veya geçici veriler için kullanılır.
Temiz ve sürdürülebilir React kodu yazımı hakkında daha fazla bilgi için Temiz Kod Yazmak yazımızı, JavaScript’in temel veri yapıları için ise JavaScript Array Methodları yazımızı inceleyebilirsiniz.
Özetlemek gerekirse redux-persist paketi, bir değişkeni tekrar tekrar istek atıp set işlemi yapmak yerine tek bir istekte setleyip siz değiştirmediğiniz sürece aynı kalması sayesinde oldukça kullanışlı bir pakettir. Kullanıcı deneyimini iyileştirirken aynı zamanda gereksiz servis isteklerini azaltarak uygulama performansına da katkı sağlar.
Yukarıdaki kod örneklerinin tamamını görmek için redux-persist resmi GitHub reposunu ziyaret edebilirsiniz. Diğer blog yazılarımıza göz atmak için blog sayfamızı ziyaret edebilirsiniz.
Redux Persist localStorage’a hangi verileri kaydeder?
Varsayılan davranışta Redux Persist, reducer’daki tüm değişkenleri localStorage’a kaydeder. Whitelist kullanarak yalnızca seçtiğiniz reducer’ların kaydedilmesini, blacklist kullanarak bazı reducer’ların kaydedilmemesini sağlayabilirsiniz. Bu sayede hassas ya da geçici verilerinizi persist kapsamının dışında tutabilirsiniz.
Redux Persist Redux Toolkit ile birlikte kullanılabilir mi?
Evet. Redux Toolkit (RTK) ile redux-persist birlikte kullanılabilir; ancak RTK’nın serializability middleware’i persist actions için uyarı verebilir. Bu sorunu çözmek için configureStore yapılandırmasında middleware ayarına serializableCheck: { ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER] } eklenmesi gerekir.
configureStore
serializableCheck: { ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER] }
Redux Persist ile React Native’de state kalıcılığı nasıl sağlanır?
React Native’de web tarayıcısının localStorage’u bulunmaz. Bu nedenle @react-native-async-storage/async-storage paketini kurup persistConfig yapılandırmasında storage: AsyncStorage olarak belirtmeniz gerekir. Kalan yapılandırma React web uygulamalarıyla özdéştir.
@react-native-async-storage/async-storage
persistConfig
storage: AsyncStorage
Redux Persist kullanırken store sıfırlanması gerekirse ne yapmalıyım?
Kullanıcı çıkış yaptığında ya da store’un tamamen temizlenmesi gerektiğinde persistor.purge() metodunu çağırabilirsiniz. Bu metod localStorage’daki persist edilmiş tüm verileri temizler ve store bir sonraki yüklenmede başlangıç durumuna döner.
persistor.purge()
redux-persist — Resmi GitHub Reposu Redux — Resmi Dokümantasyon Temiz Kod Yazmak — MDP Group JavaScript Array Methodları — MDP Group
Software Developer
SAP Modülleri Nelerdir? FI, CO, SD, HCM ve Diğerleri
SAP modülleri, farklı iş süreçlerini tek bir entegre platform üzerinden yönetmeye yarayan yazılım bileşenleridir. SAP'nin açılımı,...
Belçika’da E-Fatura Zorunluluğuna Nasıl Uyum Sağlarsınız?
Giriş Belçika, 1 Ocak 2026 itibarıyla işletmeler arası ticari işlemlerde (B2B) yapılandırılmış elektronik fatura kullanılmasını zorunlu...
SAP GTS’te SPL Kontrolü (Sanctioned Party List Screening)
SAP Global Trade Services (GTS), şirketlerin uluslararası ticaret süreçlerini otomatikleştirmesine, değişen ithalat ve ihracat...
e-Defter Genel Tebliği (Sıra No: 1)’nde Değişiklik Yapılmasına Dair Tebliğ Taslağı
e-Defter Saklamadaki Mevcut Süreçe-Defter uygulamasına dahil olan mükelleflerin, 2020/Ocak ila 2023/Aralık dönemlerine (bu dönemler dahil) ait...
SAP TM’de Muhataplar İçin Lokasyon Yarat BADI’si Nedir ?
Giriş SAP APO projelerinde Business Partner verisinin planlama nesnesine dönüşmesi, veri kalitesi ve operasyonel sürdürülebilirlik...
SAP WM’den Embedded EWM’e Geçiş: Adım Adım Migration Rehberi
SAP WM’den Embedded EWM’e geçiş, salt teknik bir sistem güncellemesi değil; depo süreçlerinin yeniden tasarımını gerektiren...
SAP Event Mesh Nedir? Kullanım Senaryoları Nelerdir?
SAP Event Mesh Nedir? SAP Event Mesh, uygulamalar arasında asenkron olarak, event bazlı (event-driven) bir mimari oluşturmayı sağlayan bir bulut...
e-Fatura Özel Matrah Kodları Nelerdir ?
Giriş Özel matrah kodu KDV matrahının, mal veya hizmet bedelinin tamamı yerine komisyon, kâr marjı veya belirli bir tutar üzerinden...
Blockchain (Blokzincir) Nedir? Kapsamlı Rehber
Blokzincir nedir sorusunun en kısa yanıtı: merkezi bir otoriteye ihtiyaç duymadan verilerin güvenli, şeffaf ve değiştirilemez biçimde...
Mailiniz başarıyla gönderilmiştir en kısa sürede sizinle iletişime geçilecektir.
Mesajınız ulaştırılamadı! Lütfen daha sonra tekrar deneyin.