25-अगस्त -2019 संपादित करें
जैसा कि एक टिप्पणी में कहा गया है। मूल रिडक्स-स्टोरेज पैकेज को प्रतिक्रिया-स्टैक में स्थानांतरित कर दिया गया है । यह दृष्टिकोण अभी भी अपने स्वयं के राज्य प्रबंधन समाधान को लागू करने पर केंद्रित है।
मूल उत्तर
जबकि प्रदान किया गया उत्तर कुछ बिंदु पर मान्य था, यह ध्यान रखना महत्वपूर्ण है कि मूल रिडक्स-स्टोरेज पैकेज को हटा दिया गया है और अब इसे बनाए नहीं रखा जा रहा है ...
पैकेज रिड्यूस-स्टोरेज के मूल लेखक ने परियोजना को अपदस्थ करने का निर्णय लिया है और अब इसे बनाए नहीं रखा गया है।
अब, यदि आप भविष्य में इस तरह की समस्याओं से बचने के लिए अन्य पैकेजों पर निर्भरता नहीं रखना चाहते हैं, तो अपने स्वयं के समाधान को रोल करना बहुत आसान है।
आपको बस इतना करना है:
1- एक ऐसा फंक्शन बनाएं जो राज्य को वापस लौटाए localStorage
और फिर राज्य को createStore
स्टोर को हाइड करने के लिए दूसरे पैरामीटर में 's redux' फंक्शन पास करे।
const store = createStore(appReducers, state);
2- राज्य परिवर्तन के लिए सुनो और हर बार राज्य बदलता है, राज्य को बचाओ localStorage
store.subscribe(() => {
saveState(store.getState());
});
और यह बात है ... मैं वास्तव में उत्पादन में कुछ इसी तरह का उपयोग करता हूं, लेकिन कार्यों का उपयोग करने के बजाय, मैंने नीचे एक बहुत ही सरल वर्ग लिखा है ...
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 {
}
};
}
}
और फिर जब आपके ऐप को बूटस्ट्रैप कर रहा हो ...
import StateLoader from "./state.loader"
const stateLoader = new StateLoader();
let store = createStore(appReducers, stateLoader.loadState());
store.subscribe(() => {
stateLoader.saveState(store.getState());
});
आशा है कि यह किसी की मदद करता है
प्रदर्शन नोट
यदि आपके एप्लिकेशन में राज्य परिवर्तन बहुत अक्सर होते हैं, तो स्थानीय स्टोरेज को सहेजना भी अक्सर आपके एप्लिकेशन के प्रदर्शन को नुकसान पहुंचा सकता है, खासकर यदि राज्य ऑब्जेक्ट ग्राफ़ को क्रमबद्ध करने / डिसेरलाइज़ करने के लिए बड़ा है। इन मामलों में, आप debounce करना चाहते हैं या समारोह का उपयोग कर localStorage करने के लिए राज्य की बचत होती है न रुके हो सकता है RxJs
, lodash
या कुछ इसी तरह।