2017-03-03 6 views
11

हमारे पास एक प्रतिक्रियात्मक ऐप है जो रेडक्स, रेडक्स-पर्सिस्ट और हेडलेसजेएस कार्य का उपयोग करता है। इस कार्य को स्टोर तक पहुंच की आवश्यकता है। चूंकि कार्य पूरे ऐप को बूट किए बिना आग लग जाता है (और इसलिए डिफ़ॉल्ट रूप से इसका कोई उपयोग नहीं होता है), हमने सोचा कि हम आसानी से कार्य के अंदर स्टोर भी बना सकते हैं ताकि इसे रेडक्स-पर्सिस्ट द्वारा बहाल किया जा सके। हालांकि, यह पता चला है कि इस तरह से बनाई गई दुकान ऐप में से एक से अलग है: चलने के बाद, उनमें अलग-अलग मान होते हैं। हमने इसे कई तरीकों से परीक्षण किया और यह वास्तव में दुकानों के साथ एक समस्या (और उदाहरण के लिए कार्यों के साथ नहीं) हमें हेडलेसजेएस कार्य से रेडक्स स्टोर तक कैसे पहुंचाया जाना चाहिए?प्रतिक्रियात्मक मूल: हेडलेसलेस जेएस और रेडक्स - कार्य से स्टोर तक कैसे पहुंचे

प्रासंगिक कोड: store/configure.js:

configureStore = (client) => { 
    const middleware = createMiddleware(client); 
    const finalCreateStore = applyMiddleware(thunk, middleware, logger)(createStore); 
    const store = finalCreateStore(rootReducer, undefined, autoRehydrate()); 

    return store; 
}; 

उपयोग में (दोनों अनुप्रयोग में और सेवा में):

const client = new ApiClient(); 
const store = configureStore(client); 
client.setStore(store); 
persistStore(store, { 
    storage: AsyncStorage, 
} 

ऐप्लिकेशन में हम बस पर प्रतिक्रिया-redux से प्रदाता का उपयोग स्टोर का उपयोग करें, सेवा में हम store.dispatch का उपयोग करते हैं।

+0

भविष्य के खोजकर्ताओं के लिए: क्योंकि हम इसे उचित समय सीमा के भीतर काम करने में सक्षम नहीं थे, हम ऐप और हेडलेस कार्य के बीच जानकारी का आदान-प्रदान करने के लिए एक गैर-स्टोर आधारित समाधान के लिए गए थे। हमने AsyncStorage का उपयोग किया, जो ऐप और कार्य के बीच विश्वसनीय रूप से काम करता है। – Joran

+1

मैं एक ऑडियो प्लेयर ऐप के साथ एक ही समस्या में ठोकर खाई। ऑडियो प्लेयर से होने वाली घटनाओं को अभी भी रेडक्स स्टोर में परिवर्तन भेजना चाहिए, भले ही यह पृष्ठभूमि में हो। – fraherm

उत्तर

0

बस कार्य के अंदर स्टोर भी बनाते हैं ताकि इसे रेडक्स-पर्सिस्ट द्वारा बहाल किया जा सके।

यह वास्तव में हुआ था।

आपने दो स्टोर्स (रेडक्स के साथ सलाह नहीं दी) जो हाइड्रेट दोनों थे, लेकिन लिंक नहीं थे, क्योंकि लिंकड रेडक्स स्टोर्स जैसी कोई चीज़ नहीं है। हर बार जब आप createStore चलाते हैं, तो यह एक नई दुकान है। और हर बार जब आप प्रेषित करते हैं, तो आप इसे एक विशिष्ट स्टोर पर करते हैं।

दुर्भाग्य से async या multithreaded मुद्दों को सीधे Redux द्वारा संबोधित नहीं किया जाता है।

हालांकि यह संभव होगा कि मिडलवेयर और/या स्टोर श्रोताओं के साथ दो स्टोरों को सिंक में रखें।

लेकिन रेडक्स भी धागे के बीच संचार के लिए एक माध्यम नहीं है (जो मुझे लगता है कि ये कार्य हैं, या आप इसे केवल एक बार स्टोर के संदर्भ में एक बार संदर्भ दे सकते हैं या मुख्य ऐप स्टोर से संदर्भ संदर्भ दे सकते हैं कार्य)।

यह कमांड-क्वेरी-सेपरेशन और केंद्रीकृत राज्य का एक रूप है।

संबंधित मुद्दे