मेरे पास एक बहु-चरण फ़ॉर्म एप्लिकेशन है, और मैं अपने सिर को पाने के लिए संघर्ष कर रहा हूं कि मैं अपने रेडक्स राज्य को कैसे बचा सकता हूं और उदाहरण के लिए रीफ्रेश के बाद इसे फिर से चला सकता हूं? ऐप में वापस/आगे जाकर अपेक्षित काम करता है, लेकिन ब्राउज़र रीफ्रेश होने के बाद, मेरा पिछला राज्य खाली है। आदर्श रूप से मैं पथ से संबंधित सत्र भंडारण में पूर्व राज्य को सहेजने में सक्षम होना चाहता हूं, ताकि मैं बाद में फिर से खेल सकूं, लेकिन मैं नहीं देख रहा हूं कि मैं इसे आसानी से कैसे कर सकता हूं। क्या किसी ने ऐसा कुछ किया है और कुछ पॉइंटर्स प्रदान कर सकते हैं? धन्यवाद।रेडक्स राउटर - रीफ्रेश के बाद राज्य को फिर से कैसे चलाएं?
उत्तर
ऐसा लगता है कि आप एक-पेज एप फ्रेमवर्क का उपयोग एकाधिक पृष्ठ संदर्भ में करने का प्रयास कर रहे हैं। दो नाटक नाइसर को एक साथ बनाने के लिए, आप अपना खुद का मिडलवेयर बनाने में देख सकते हैं जो रीफ्रेश/पेज नेविगेशन के बाद किसी भी राज्य को खोने वाले प्रतीत होने वाले ऐप को बनाने के लिए localStorage
से राज्य को सिंक्रनाइज़ करता है।
- तरीका है कि redux-logger लॉग both the previous and next states, मैं शायद
createStoreWithMiddleware
समारोह सृजन (सहीredux-logger
से पहले) की शुरुआत (localStorageLoad
) और अंत (localStorageDump
) में मिडलवेयर प्लग इन करके शुरुआत करते हैं, करने के लिए समान:
// store/configureStore.js
const createStoreWithMiddleware = applyMiddleware(
localStorageLoad, thunk, promise, localStorageDump, logger
)(createStore);
- फिर एक प्रारंभिक कार्रवाई सही आग जब आप पहले अपने एप्लिकेशन renders संग्रहीत राज्य लोड करने के लिए अपने अनुप्रयोग को प्रारंभ:
// index.js
const store = configureStore();
store.dispatch({ type: 'INIT' });
ReactDOM.render(<App />, document.getElementById('root'));
localStorageLoad
INIT
कार्रवाई को संभालने और SET_STATE
कार्रवाई के कुछ प्रकार है, जिनके अनुसार पहले से localStorage
में बचा लिया गया था के साथ एक पेलोड शामिल हैं प्रेषण जाएगा।
// middleware/localStorageLoad.js
export default store => next => action => {
const { type } = action;
if (type === 'INIT') {
try {
const storedState = JSON.parse(
localStorage.getItem('YOUR_APP_NAME')
);
if (storedState) {
store.dispatch({
type: 'RESET_STATE',
payload: storedState
});
}
return;
} catch (e) {
// Unable to load or parse stored state, proceed as usual
}
}
next(action);
}
फिर, एक कम करने जो कि पेलोड के साथ राज्य को बदल देता है, प्रभावी रूप से अनुप्रयोग रिबूट करने के रूप में यह पहले से था जोड़ें।
- पाश पूरा करने के लिए, आप एक
localStorageDump
मिडलवेयर कि श्रृंखला है किlocalStorage
में प्रत्येक कम राज्य वस्तु की बचत होती है के अंत में आता है की जरूरत होगी। कुछ इस तरह:
// middleware/localStorageDump.js
export default store => next => action => {
const state = store.getState();
localStorage.setItem('YOUR_APP_NAME', JSON.stringify(state));
next(action);
}
बस एक विचार है, वास्तव में इसे करने की कोशिश नहीं की है। उम्मीद है कि आप एक समाधान की ओर शुरू करने में मदद करता है।
आप रीफ्रेश पर राज्य को स्टोर नहीं कर सकते हैं यह सामान्य है। आम तौर पर आप इन कुकीज़ या वेब स्टोरेज के अंदर स्टोर करते हैं।
- कुकीज ब्राउज़र, सर्वर के बीच समन्वयित होते हैं और आपके द्वारा किए जाने वाले प्रत्येक अनुरोध पर सेट होते हैं।
- Localstorage आपको डेटा स्टोर करने के लिए 5 एमबी तक देता है और अनुरोध के साथ कभी भी नहीं भेजता है।
Redux:
- सेट LocalStorage गुण जब फ़ॉर्म भरना। (पूर्ण होने पर इसे साफ़ करना सुनिश्चित करें)
- पृष्ठ को अपूर्ण रूप से रीफ्रेश करें।
- जब माउंट अपने
Form
घटक,componentWillMount
विधि का उपयोग एक कम करने - कम करने को अद्यतन करता redux राज्य है जो बदले में गुण आप LocalStorage से मिला साथ घटक अद्यतन करता है करने के लिए
localstorage
औरdispatch
डेटा को पढ़ने के लिए प्रतिक्रिया।
यदि आप फॉर्म डेटा स्टोर करने के लिए रेडक्स का उपयोग स्थानीय स्टोरेज के गुण प्रेषण करते हैं।
यदि Form
घटक के अंदर स्थानीय स्टोरेज नहीं पढ़ा और प्रारंभिक मान सेट करें।
आशा है कि इससे मदद मिलती है!
मुझे पता है कि यह सामान्य व्यवहार है, लेकिन मैं उम्मीद कर रहा था कि राउटर में राउटर परिवर्तन पर राउटर परिवर्तन को उस विशेष मार्ग के लिए सत्रस्टॉरेज में सहेजने की क्षमता और फिर एक बार में राज्य अपडेट करें। मुझे पता है कि रेडक्स-राउटर मेरे राज्य में मार्ग की जानकारी बचाता है, मैं बस एक घटक स्तर की बजाय इस ऐप को व्यापक रूप से करने की उम्मीद कर रहा था। – Lee
ओह तो आप का मतलब है कि जब आप अपने ऐप में किसी अन्य रूट में संक्रमण करते हैं तो आप एक अधूरा रूप की स्थिति को सहेजना चाहते हैं? मैंने गलत समझा कि मैंने सोचा था कि आप राज्य को पुनर्स्थापित करना चाहते थे जब उपयोगकर्ता ने 'टैब बंद कर दिया' और ऐप को फिर से संशोधित किया। इसका वास्तव में राउटर संक्रमण के साथ कुछ भी नहीं है बल्कि रेडक्स स्टोर की आंतरिक स्थिति है। आप https://github.com/erikras/redux-form पर एक नज़र डालना चाहते हैं, यह रेडक्स स्टोर के अंदर फ़ॉर्म स्थिति सहेजता है। तो जब भी आप राज्य को वापस लेते हैं तब भी फॉर्म में वही होगा जब तक आप अन्यथा नहीं कहें और सही प्रोप पारित न करें। – JensDebergh
नहीं, मूल रूप से जब उपयोगकर्ता ए से बी में संक्रमण करता है, तो मैं राज्य को ए के रूप में स्टोर करना चाहता हूं ताकि यूआरएल के आधार पर बी (रीफ्रेश इत्यादि) पर वापस जाने पर इसे फिर से लोड किया जा सके। लेकिन यदि संभव हो, तो प्रति घटक के बजाय, मैं इस ऐप को व्यापक बनाना चाहता हूं। मूल रूप से हॉट लोडिंग की अनुमति देने के लिए, वेबपैक का उपयोग करने के लिए सबकुछ रिफैक्टर किए बिना (इस समय ब्राउज़रइफ़ का उपयोग करके)। – Lee
- 1. राउटर राज्य रेडक्स
- 2. रेडक्स और रेडक्स राउटर
- 3. रिएक्ट राउटर पर, राज्य में लॉग इन कैसे रहें पृष्ठ को रीफ्रेश करें?
- 4. प्रतिक्रिया, रेडक्स, प्रतिक्रिया-राउटर?
- 5. रीफ्रेश टोकन रीफ्रेश के बाद डेटा रीफ्रेश कैसे करें jwt
- 6. MD5 गणना-राज्य Serialize और बाद में फिर से शुरू?
- 7. उप मार्गों के लिए रेडक्स राज्य कैसे पास करें?
- 8. (यूनिवर्सल रिएक्ट + रेडक्स + रिएक्ट-राउटर) प्रारंभिक ब्राउज़र लोड पर रूट डेटा को फिर से लाने से कैसे बचें?
- 9. नेस्टेड नक्शा रेडक्स राज्य को सही ढंग से
- 10. टेक्स्ट एडिटर के लिए रेडक्स आर्किटेक्चर: युग्मित राज्य से निपटने
- 11. प्रक्रिया के बाद राज्य को पुनर्स्थापित करें
- 12. jQuery रीफ्रेश/सफलता के बाद पृष्ठ को फिर से लोड करें
- 13. मैं कब प्रतिक्रिया राज्य बनाम रेडक्स स्टोर
- 14. रेडक्स; जब combineReducers
- 15. प्रतिक्रिया रेडक्स और प्रतिक्रिया-राउटर-डोम
- 16. ग्रहण - इसे 'रन' विंडो को फिर से सेट करने के बाद 'हमेशा पृष्ठभूमि में चलाएं'
- 17. एंटर हुक पर प्रतिक्रिया-राउटर से रेडक्स स्टोर से कैसे कनेक्ट करें?
- 18. प्रतिक्रिया-राउटर-रेडक्स और प्रतिक्रिया-बूटस्ट्रैप
- 19. निर्भर राज्य के साथ रेडक्स रेड्यूसर कैसे लिखें
- 20. किसी विशेष वातावरण के लिए राज्य को कैसे चलाएं?
- 21. रेडक्स रेड्यूसर - गहराई से घोंसला वाला राज्य बदलना
- 22. यू-राउटर $ state.go() डेटा रीफ्रेश नहीं करता है
- 23. रिएक्ट राउटर और रेडक्स के साथ एंटर ट्रांज़िशन सरल राउटर नई रूट के घटक को प्रस्तुत न करें
- 24. प्रतिक्रिया-राउटर 4.0, प्रतिक्रिया-राउटर-डोम और प्रतिक्रिया-राउटर-रेडक्स के बीच क्या अंतर है?
- 25. रेडक्स से प्रतिक्रिया कैसे प्राप्त करें?
- 26. रेडक्स/प्रतिक्रिया ऐप में राज्य में रेड्यूसर
- 27. प्रतिक्रिया राउटर - लॉगिन के बाद पुनर्निर्देशन
- 28. सेवावर्कर अद्यतन के बाद पृष्ठ को रीफ्रेश कैसे करें?
- 29. आवेदन रोकें/फिर से शुरू करें राज्य
- 30. रीफ्रेश किए बिना यूआरएल को फिर से लिखना, जैसे GitHub.com
बिल्कुल सही, यह सही लाइनों के साथ दिखता है। कुछ कारणों से मुझे मिडलवेयर सोचने के बजाय रूटिंग का उपयोग करने पर लटका दिया गया था। इसे जाने दो, लेकिन यह एक अच्छा प्रारंभिक बिंदु किसी भी तरह से धन्यवाद, धन्यवाद! – Lee
निश्चित रूप से, शुभकामनाएं। इसके लिए रेडक्स पर झुकाव के बारे में अच्छा हिस्सा यह है कि आप इन सभी टुकड़ों के साथ समाप्त होते हैं जो केवल शुद्ध कार्य हैं। इससे पहले कि आप इसे अपने ऐप में एकीकृत कर सकें, आप आसानी से सभी उपरोक्त कोड का परीक्षण कर सकते हैं। – bosgood
मुझे यह बहुत उपयोगी पाया गया और मैंने कुछ ऐसा लागू किया जो यहां प्रस्तावित समाधान से शुरू होता है। अंतिम समाधान में यहां कुछ सुझाव दिए गए थे जो मैंने सोचा था कि मुझे साझा करना चाहिए। सबसे पहले, मैंने प्रारंभिक स्थिति प्राप्त करने के लिए "आईएनआईटी" विधि का उपयोग नहीं किया था। इसके बजाए, स्टोर बनाने के दौरान, मैंने बस प्रारंभिक स्थिति को लोड किया। यह नियमों के खिलाफ हो सकता है, लेकिन यह मुझे समझ में आता है। यह अनिवार्य रूप से कोड स्थानीय स्टोरेज लोड है। अगला, मैंने sessionStorage का उपयोग किया। यह एक नाइटपिक है, लेकिन ब्राउज़र बंद होने और पुनरारंभ होने के बाद, मैं शुरू करना पसंद करूंगा। मैं कमरे से बाहर चला रहा हूं ... – Scott