2015-11-15 13 views
5

जैसे कुछ का उपयोग करके Redux में एकाधिक combineReducers फ़ंक्शंस को कैसे जोड़ सकता हूं, मैं redux-immutablejs के माध्यम से अपने स्टोर को प्रबंधित करने के लिए immutable.JS का उपयोग कर रहा हूं। अब मैं रेडक्स-फॉर्म लाइब्रेरी का उपयोग करना चाहूंगा लेकिन मुझे रेड्यूसर के संयोजन में कोई समस्या है।मैं redux में immutable.js

रेडक्स-अपरिवर्तनीय एक गठबंधन रेड्यूसर फ़ंक्शन प्रदान करता है जो जांच करेगा कि क्या सभी रेड्यूसर इसे पारित करने योग्य अपरिवर्तनीय वस्तुएं लौटाते हैं।

रेडक्स स्वयं एक गठबंधन रेड्यूसर फ़ंक्शन प्रदान करता है जो ऐसी कोई जांच नहीं करता है।

रेडक्स-फॉर्म की आवश्यकता है कि आप अपने reducers शामिल हैं, लेकिन मैं Redux immutable के combineReducers का उपयोग कर ऐसा नहीं कर सकता क्योंकि यह असफल हो जाएगा।

तो मुझे क्या करना मूल रूप से तो जैसे इन दोनों कार्यों के आउटपुट गठबंधन है कोशिश कर रहा हूँ:

import { combineReducers } from 'redux'; 
import { combineReducers as combineReducersUtils } from 'redux-utils'; 
import {reducer as formReducer} from 'redux-form'; 

const mainReducers = combineReducersUtils({ 
    devices, alarms 
}); 

const extraReducers = combineReducers({ 
    form: formReducer 
}); 

export default (mainReducers + extraReducers); 

अंतिम पंक्ति स्पष्ट रूप से काम नहीं करता है लेकिन मूल रूप से दिखाता है कि मैं क्या करने के बाद कर रहा हूँ।

इसे पढ़ने के लिए समय निकालने के लिए धन्यवाद।

+1

क्षमा स्पष्ट combineReducers बस होने के लिए redux-अपरिवर्तनीय चारों ओर एक हल्के आवरण है। –

उत्तर

5

शायद ऐसा कुछ हो सकता है?

function rootReducer(state, action) { 
    const newState = combineReducersUtils({devices, alarms})(state, action); 
    return combineReducers({form: formReducer})(newState, action); 
} 

यह काम करना चाहिए क्योंकि combineReducers के रिटर्न मान सिर्फ एक कम करने है:

(समारोह): एक कम करने कि हर कम करने के अंदर reducers आपत्ति का आह्वान, और एक ही साथ एक राज्य वस्तु का निर्माण आकार।

https://github.com/rackt/redux/blob/master/docs/api/combineReducers.md


हर प्रेषण पर एक नया कार्य नहीं बनाने के लिए अपडेट किया गया: redux-utils से

const mainReducers = combineReducersUtils({devices, alarms}); 
const formReducers = combineReducers({form: formReducer}); 

function rootReducer(state, action) { 
    return formReducers(mainReducers(state, action), action); 
} 
+3

बस भविष्य में इसे पढ़ने वाले किसी के लिए यह अब रेडक्स-फॉर्म के हिस्से के रूप में पूरी तरह से प्रलेखित है http://erikras.github.io/redux-form/#/faq/immutable-js?_k=dqesvr –

+3

यह होगा एक बहुत खराब प्रदर्शन क्योंकि जब भी कोई कार्रवाई भेजी जाती है तो आप फ़ंक्शन आवंटित कर रहे होते हैं। –

+1

@DanAbramov एक बेहतर तरीका है? मेरे पास कुछ साझा फ़ील्ड हैं (यानी पृष्ठ संख्या, सॉर्ट प्रकार) और मैं अलग-अलग reducers – user3409950

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