25 Ağustos 2019'u Düzenle
Yorumlardan birinde belirtildiği gibi. Orijinal yeniden depolama paketi react-stack'e taşındı . Bu yaklaşım hala kendi durum yönetimi çözümünüzü uygulamaya odaklanmaktadır.
Orijinal Cevap
Verilen yanıt bir noktada geçerli olsa da, orijinal yeniden düzenleme depolama paketinin kullanımdan kaldırıldığını ve artık korunmadığını fark etmek önemlidir ...
Yeniden depolama paketinin orijinal yazarı, projeyi kullanımdan kaldırmaya karar verdi ve artık sürdürülmedi.
Şimdi, gelecekte bu gibi sorunlardan kaçınmak için diğer paketlere bağımlı olmak istemiyorsanız, kendi çözümünüzü kullanmak çok kolaydır.
Yapmanız gereken tek şey:
1- Depoyu hidratlamak için ikinci parametrede durumu döndüren localStorage
ve ardından durumu createStore
'nin redux işlevine geçiren bir işlev oluşturun.
const store = createStore(appReducers, state);
2- Durum değişikliklerini dinleyin ve durum her değiştiğinde durumu şuraya kaydedin: localStorage
store.subscribe(() => {
saveState(store.getState());
});
Ve işte bu ... Aslında üretimde benzer bir şey kullanıyorum, ancak fonksiyonları kullanmak yerine, aşağıdaki gibi çok basit bir sınıf yazdım ...
class StateLoader {
loadState() {
try {
let serializedState = localStorage.getItem("http://contoso.com:state");
if (serializedState === null) {
return this.initializeState();
}
return JSON.parse(serializedState);
}
catch (err) {
return this.initializeState();
}
}
saveState(state) {
try {
let serializedState = JSON.stringify(state);
localStorage.setItem("http://contoso.com:state", serializedState);
}
catch (err) {
}
}
initializeState() {
return {
}
};
}
}
ve sonra uygulamanızı önyüklerken ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
Umarım birine yardımcı olur
Performans Notu
Uygulamanızda durum değişiklikleri çok sık oluyorsa, yerel depolamaya çok sık kaydetme, özellikle serileştirme / seriyi kaldırma durum nesnesi grafiği büyükse, uygulamanızın performansına zarar verebilir. Bu gibi durumlar için, sen gürültüye istediğiniz veya kullanarak localStorage için durumunu kaydeder fonksiyonu azaltma olabilir RxJs
, lodash
ya da ona benzer bir şey.