मैं रेडक्स में गहराई से घोंसला वाले राज्य को बदलने के तरीके के बारे में अपने सिर को लपेटने की कोशिश कर रहा हूं। यह मुझे समझता है कि reducers गठबंधन और उन टुकड़ों के लिए राज्य के प्रथम स्तर के गुणों को बदलने के लिए। जहां मैं इतना स्पष्ट नहीं हूं कि गहराई से घिरा हुआ संपत्ति कैसे बदलूं। आइए दिखाएं कि मेरे पास एक शॉपिंग कार्ट ऐप है। नीचे मेरी स्थिति है:रेडक्स रेड्यूसर - गहराई से घोंसला वाला राज्य बदलना
{
cart: {
items: []
},
account: {
amountLeft: 100,
discounts: {
redeemed: [],
coupons: {
buyOneGetOne: false
}
}
}
}
एक उपयोगकर्ता एक कोड में प्रवेश करती है, मान लीजिए कि वे "buyOneGetOne" कूपन का लाभ नहीं कर सकते हैं और उस मान हमेशा सही होना चाहिए। मेरे पास कार्ट के लिए एक reducer है और दूसरे खाते के लिए। एक प्रथम स्तर संपत्ति (जैसे अगर मैं गाड़ी के आइटम समाशोधन किया गया था), मैं अपने कम करने में निम्नलिखित बस करना होगा:
case 'EMPTY_CART':
return Object.assign({}, state, {items: []});
buyOneGetOne बदलते लिए, तथापि, ऐसा लगता है कि मैं पहली बार एक ऐसा करने के लिए की आवश्यकता होगी लगता है कूपन पर ऑब्जेक्ट.साइन (क्योंकि buyOneGetOne संशोधित किया गया था), फिर छूट पर ऑब्जेक्ट.साइन करना (क्योंकि मैंने कूपन संशोधित किए थे), और फिर अंततः कार्रवाई को उत्सर्जित कर दिया ताकि reducer ऑब्जेक्ट पर ऑब्जेक्ट कर सकता है। खाते में छूट (क्योंकि छूट अब है बदला हुआ)। यह वास्तव में जटिल और गलत करने में आसान लगता है, हालांकि, मुझे विश्वास है कि वहां एक बेहतर तरीका होना चाहिए।
क्या मैं यह सब गलत कर रहा हूं? ऐसा लगता है जैसे रेड्यूसर का उपयोग केवल राज्य के रूट स्तर गुणों (जैसे कार्ट और खाते) को संशोधित करने के लिए किया जाता है और मुझे एक रेड्यूसर नहीं होना चाहिए जो खाते के अंदर राज्य को छूता है (जैसे डिस्काउंट रेड्यूसर), क्योंकि खाते में पहले से ही एक reducer है । लेकिन जब मैं केवल राज्य के पेड़ से एक संपत्ति को बदलना चाहता हूं, तो यह ऑब्जेक्ट श्रृंखला को रूट के बच्चे को ऑब्जेक्ट चेन तक हर तरह से बदलने के लिए जटिल हो जाता है ...
क्या आप/क्या आप reducers के अंदर reducers है, इस मामले में एक छूट reducer है?
अरे, कुछ सेकंड तक मुझे हराया - महान जवाब हालांकि! – mxstbr
वास्तव में, आप अपने ऐप में एक से अधिक बार 'combineReducers() 'का उपयोग कर सकते हैं। मैं आपको रेडक्स रेपो में [शॉपिंग कार्ट] (https://github.com/reactjs/redux/tree/master/examples/shopping-cart/reducers) उदाहरण देखने के लिए अनुशंसा करता हूं जो रेड्यूसर संरचना के विभिन्न पैटर्न प्रदर्शित करता है। –
यह अच्छा है, मुझे इसका एहसास नहीं हुआ। हालांकि, लक्ष्य के रूप में एक राज्य पेड़ जितना संभव हो उतना लक्ष्य नहीं है? नेस्टेड रेड्यूसर और एक फ्लैट राज्य के पेड़ के बीच संतुलन कहां है? – Skitterm