⊗jsrxPmATER 48 of 57 menu

Redux में अतिरिक्त रिड्यूसर्स

आइए हमारे उत्पादों वाले एप्लिकेशन को खोलें, और इसमें productsSlice.js फ़ाइल खोलें। शायद आपने गौर किया होगा कि हमने thunk fetchProducts को एक अलग फ़ंक्शन के रूप में बनाया था? हमने ऐसा इसलिए किया, क्योंकि createSlice thunks को परिभाषित करने का समर्थन नहीं करता है। तो फिर हम products स्लाइस के रिड्यूसर को उन एक्शनों पर प्रतिक्रिया करने के लिए कैसे मजबूर करें जो products के बाहर परिभाषित हैं? आखिरकार, हमें ठीक उन एक्शनों को प्रोसेस करने की आवश्यकता है जो thunk fetchProducts द्वारा भेजे जाते हैं।

ऐसे मामलों के लिए createSlice में extraReducers नामक एक प्रॉपर्टी है, जो अतिरिक्त रिड्यूसर्स जोड़ने की अनुमति देती है, जो बदले में उन एक्शनों को प्रोसेस करेंगे जो इस स्लाइस में परिभाषित नहीं हैं।

आइए अब createSlice फ़ंक्शन के बॉडी में सभी रिड्यूसर्स वाली reducers प्रॉपर्टी के बाद एक और मेथड extraReducers जोड़ें:

extraReducers() {},

हमें इस मेथड को एक ऑब्जेक्ट builder पास करना होगा, जिसमें ऐसे मेथड्स हैं, जिनकी मदद से अतिरिक्त रिड्यूसर्स जोड़े जा सकते हैं:

extraReducers(builder) {},

हम builder के एक मेथड का उपयोग करेंगे - addCase, जो पहले पैरामीटर के रूप में action creator लेता है, और दूसरे के रूप में reducer लेता है। fetchProducts द्वारा रिक्वेस्ट भेजे जाने पर जो एक्शन भेजा जाएगा, उनमें से एक है fetchProducts.pending, जो हमें बताता है कि रिक्वेस्ट भेज दी गई है। आइए इस मामले में स्टेटस को 'in progress' में बदल दें (इससे पहले यह 'idle' था):

extraReducers(builder) { builder.addCase(fetchProducts.pending, (state) => { state.status = 'in progress' }) },

अब उस एक्शन को प्रोसेस करते हैं, जो सफल रिक्वेस्ट के मामले में भेजा जाएगा। यहां हम स्टेट में स्टेटस को केवल 'success' में ही नहीं बदलेंगे, बल्कि एक्शन के payload से प्रोडक्ट्स को products स्लाइस में भी ले आएंगे। सभी प्रोडक्ट्स को इकट्ठा करने के लिए हमें concat मेथड की आवश्यकता होगी:

extraReducers(builder) { builder .addCase(fetchProducts.pending, (state) => { state.status = 'in progress' }) .addCase(fetchProducts.fulfilled, (state, action) => { state.status = 'success' state.products = state.products.concat(action.payload) }) },

अनुरोध विफल होने की स्थिति में हम स्टेटस को 'fail' में बदल देंगे और स्टेट में त्रुटि संदेश लिख देंगे:

.addCase(fetchProducts.rejected, (state, action) => { state.status = 'fail' state.error = action.error.message })

अगर हम अभी अपना एप्लिकेशन चलाएं और मेन्यू में 'Products' पर क्लिक करें, तो कुछ सेकंड बाद (सर्वर पर हमारे द्वारा लगाए गए विलंब के बारे में याद है?) हम उत्पादों की सूची देखेंगे।

ठीक इसी तरह हम Redux DevTools में भी बदलाव देखेंगे। अब हमारे उत्पाद स्टेट में भी दिखाई देंगे ('State' टैब देखें), अगर आपने एक्शन products/fetchProducts/fulfilled पर क्लिक किया है। वहां नया स्टेटस 'success' भी दिखाई देगा। अब एक्शन products/fetchProducts/pending पर क्लिक करें और देखें कि 'State' टैब अब किस तरह अलग है।

एकमात्र अप्रिय पल, जो आपके साथ हो सकता है (मैंने इसके बारे में पिछले पाठ में बात की थी) - वह है डेटा के अनुरोध का डुप्लिकेशन। जिसके परिणामस्वरूप, हमारी सूची में 8 के बजाय, पूरे 16 उत्पाद होंगे और डेवलपर कंसोल में गंभीर चेतावनियां। आइए इसे अगले पाठ में समझते हैं।

अपना छात्रों वाला एप्लिकेशन खोलें। इसमें studentsSlice.js फ़ाइल खोलें। createSlice फ़ंक्शन के बॉडी में reducers प्रॉपर्टी के बाद extraReducers प्रॉपर्टी जोड़ें। extraReducers मेथड को builder पास करें।

builder.addCase मेथड की मदद से pending, fulfilled और rejected एक्शनों के लिए प्रोसेसिंग जोड़ें, जो fetchStudents द्वारा डेटा का अनुरोध करते समय भेजे जाते हैं, जैसा कि पाठ में दिखाया गया है।

हिन्दी
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
हम साइट के कार्य, विश्लेषण और व्यक्तिगतकरण के लिए कुकीज़ का उपयोग करते हैं। डेटा प्रसंस्करण गोपनीयता नीति के अनुसार किया जाता है।
सभी स्वीकार करें कॉन्फ़िगर करें अस्वीकार करें