2016-04-04 10 views
13

इस त्रुटि के बारे में यहां कुछ भी नहीं ढूंढ पाया है "स्टोर में वैध रेड्यूसर नहीं है। सुनिश्चित करें कि तर्क गठबंधन करने के लिए पारित किया गया है रेड्यूसर एक ऐसा ऑब्जेक्ट है जिसका मूल्य reducers है।" शायद क्योंकि यह बहुत बेवकूफ है।रेडक्स स्टोर में वैध रेड्यूसर नहीं है

मेरे कम करने

export default function FriendListReducer(state = {friends : []}, action) { 
    switch (action.type) { 
    case 'ADD_FRIEND': 
     return [ 
     { friends : action.payload.friend }, ...state.friends 
     ]  
    default: 
     return state; 
    } 
    return state; 
} 

Combiner

import { combineReducers } from 'redux'; 
import { FriendListReducer } from './FriendListReducer'; 

const rootReducer = combineReducers({ 
    friends: FriendListReducer 
}); 
export default rootReducer; 

मेरे दुकान config

import { applyMiddleware, createStore } from 'redux'; 
import thunkMiddleware from 'redux-thunk'; 
import createLogger from 'redux-logger'; 
import rootReducer from '../reducers/reducers'; 

export default function configureStore(initialState = { friends: [] }) { 
    const logger = createLogger({ 
    collapsed: true, 
    predicate:() => 
    process.env.NODE_ENV === `development`, // eslint-disable-line no-unused-vars 
    }); 

    const middleware = applyMiddleware(thunkMiddleware, logger); 

    const store = middleware(createStore)(rootReducer, initialState); 

    if (module.hot) { 
    // Enable Webpack hot module replacement for reducers 
    module.hot.accept('../reducers/reducers',() => { 
     const nextRootReducer = require('../reducers/reducers').default; 
     store.replaceReducer(nextRootReducer); 
    }); 
    } 

    return store; 
} 

उत्तर

20

आपका import बयान सही नहीं है। या तो आप import { Foo } from 'bar' का उपयोग export Foo, याimport Foo from 'bar' का उपयोग करते हैं यदि आप export default Foo के साथ निर्यात करते हैं।

दूसरे शब्दों में, export default function FriendListReducer से export function FriendListReducer में बदलें, या import { FriendListReducer } से import FriendListReducer पर आयात विवरण बदलें।

0

ऐसा लगता है कि अपने उच्च-स्तर कम करने समारोह को उसके डिफ़ॉल्ट मान के रूप में एक सरणी उपयोग कर रहा है की तरह। Redux उम्मीद करता है कि आपके राज्य का शीर्ष एक वस्तु होगी, एक सरणी नहीं। उस ऑब्जेक्ट में किसी विशेष कुंजी पर सरणी डालने का प्रयास करें, जैसे { friendList : [] }

+0

ऑब्जेक्ट में बदल गया और एक ही त्रुटि प्राप्त हो रही है – chrysillo

+0

आपके "प्रारंभिक स्तर" मान जो आप स्टोर में जा रहे हैं वह उस संरचना से मेल नहीं खा रहा है जिसे आप 'combineReducers' का उपयोग करके बना रहे हैं। आप 'FriendListReducer' नामक फ़ील्ड 'combineReducers' दे रहे हैं, लेकिन स्टोर प्रारंभिक स्थिति में 'मित्र' हैं। आपको उन मैच को एक या दूसरे तरीके से बनाना होगा। चूंकि वे मेल नहीं खाते हैं, फिर भी आपको एक ही समस्या है। – markerikson

+0

मैंने कोड अपडेट किया है और अभी भी वही त्रुटि प्राप्त कर रहा है, यहां अपडेट किया गया कोड – chrysillo

2

../reducers/reducers? यह एक अजीब नामकरण

भी हो, यह ../reducers/reducers लगता है एक कम करने वापस नहीं करता है, अगर reducers एक निर्देशिका, एक index.js अंदर एक रूट कम करने में कहें, प्रत्येक कम करने के लिए आयात और बनाने

import FriendListReducer from "./FriendListReducer" 

const rootReducer = combineReducers({ 
    friendList : FriendListReducer 
}) 

export default rootReducer 

आपके पास राज्य होगा। मित्रवत सूची आपके राज्य में।

मुझे आशा है कि यह मदद मिलेगी

+0

मुझे एक ही नाम (अनुक्रमणिका) के साथ कई फाइलें करने में भ्रमित करता है। फ़ोल्डर के reducers में मेरे combiner reducers.js नाम दिया गया है और यह उल्लेख के रूप में स्थापित है – chrysillo

4

यदि ऑब्जेक्ट खाली है।

export default combineReducers({ 

}) 

यह त्रुटि दिखाएगी।

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