2016-06-23 15 views
8

बनाने के लिए मैं त्रुटि हो रही है Unexpected key "characters" found in initialState argument passed to createStore. Expected to find one of the known reducer keys instead: "marvelReducer", "routing". Unexpected keys will be ignored.प्रतिक्रिया Redux अप्रत्याशित कुंजी संग्रह

rootReducer पारित कर दिया:

import { combineReducers } from 'redux'; 
import { routerReducer } from 'react-router-redux'; 
import marvelReducer from './marvelReducer'; 

const rootReducer = combineReducers({ 
    marvelReducer, 
    routing: routerReducer 
}); 
export default rootReducer; 

marvelReducer:

import { FETCH_MARVEL } from '../constants/constants'; 
import objectAssign from 'object-assign'; 

export default function marvelReducer(state = [], action) { 
    switch (action.type) { 
    case FETCH_MARVEL: 
     return objectAssign({}, state, {characters: action.data}); 

    default: 
     return state; 
    } 
} 

दुकान:

import { createStore } from 'redux'; 
import { syncHistoryWithStore } from 'react-router-redux'; 
import { browserHistory } from 'react-router'; 

import rootReducer from '../reducers/index'; 

const initialState = { 
    characters: [] 
}; 

const store = createStore(rootReducer, initialState); 

export const history = syncHistoryWithStore(browserHistory, store); 

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

export default store; 

मैं किसी अन्य एप्लिकेशन में बहुत समान कोड है और यह ठीक काम कर रहा है। सुनिश्चित नहीं हैं कि यहां

उत्तर

7

स्टोर की प्रारंभिक स्थिति के रूप में सेट किए गए बीच के बीच एक छोटा विसंगति है और स्टोर की प्रारंभिक स्थिति क्या होनी चाहिए, इसकी अपेक्षा करने के लिए आप स्टोर को क्या कहते हैं, उदाहरण के लिए - अद्यतन अपने प्रारंभिक अवस्था जैसे दुकान के लिए सेटिंग:

const initialState = { 
    marvel: { 
    characters: [] 
    } 
}; 

और यह भी यह एक अच्छा विचार सार्थक नाम है कि उन्हें में कम करने शामिल नहीं है करने के लिए अपने राज्य वृक्ष चर धारकों नाम के लिए है, तो अद्यतन

const rootReducer = combineReducers({ 
    marvelReducer, 
    routing: routerReducer 
}); 

const rootReducer = combineReducers({ 
    marvel: marvelReducer, 
    routing: routerReducer 
}); 

लिए और है कि आप के लिए चाल करना चाहिए।

उम्मीद है कि यह मदद करता है,

पीएस। कुछ दस्तावेज़

the docs से:

आप combineReducers साथ कम करने का उत्पादन किया है, तो यह कुंजी यह करने के लिए पारित कर दिया के रूप में ही आकार के साथ एक सादे ऑब्जेक्ट होना चाहिए। अन्यथा, आप कुछ भी पारित करने के लिए स्वतंत्र हैं जो आपके reducer समझ सकते हैं।

आप one या two से संबंधित किसी भी क्रियाओं को संचालित करने की जरूरत नहीं है, बस उन्हें शुरू में में खींच, इस के रूप में सरल रूप में

export default combineReducers({ 
    events, 
    flash, 
    one: (state = {}) => state, 
    two: (state = {}) => state 
}) 
+0

प्रारंभिक स्थिति को वही विशेषता नाम के रूप में रेड्यूसर के रूप में सेट करना, क्या यह reducer को ओवरराइड करना समाप्त करता है? – erichardson30

+1

@ erichardson30 यह नहीं करता - यह केवल प्रारंभिक स्थिति स्थापित करेगा, यह reducer को ओवरराइट नहीं करता है। यहां [रेडक्स डॉक्स] से थोड़ा अधिक मार्गदर्शन है (http://redux.js.org/docs/api/createStore.html) '[प्रारंभिक स्तर] (कोई भी): प्रारंभिक स्थिति। आप सार्वभौमिक ऐप्स में सर्वर से राज्य को हाइड्रेट करने के लिए वैकल्पिक रूप से निर्दिष्ट कर सकते हैं, या पहले क्रमबद्ध उपयोगकर्ता सत्र को पुनर्स्थापित करने के लिए। यदि आपने गठबंधन रेड्यूसर के साथ रेड्यूसर का उत्पादन किया है, तो यह उसी आकार के साथ एक सादा वस्तु होना चाहिए क्योंकि चाबियां पास हो गई हैं। अन्यथा, आप कुछ भी पारित करने के लिए स्वतंत्र हैं जो आपका रेड्यूसर समझ सकता है। –

+0

"स्टोर की प्रारंभिक स्थिति के रूप में सेट किए गए बीच के बीच एक छोटा विसंगति है और स्टोर की प्रारंभिक स्थिति क्या होनी चाहिए, यह सुनिश्चित करने के लिए आप स्टोर को क्या कहते हैं" मैं वास्तव में इस कथन का पालन नहीं कर सकता, क्या आप थोड़ा स्पष्ट बता सकते हैं? – stevematdavies

-1

documentation से combineReducers के लिए हो रहा है:

combineReducers सहायक समारोह एक वस्तु जिनके मान एक भी कम करने में समारोह विभिन्न कम करने कार्यों आप createStore को पारित कर सकते हैं कर रहे हैं बदल जाता है।

परिणामी reducer प्रत्येक बच्चे reducer कहते हैं, और उनके परिणाम एक राज्य वस्तु में इकट्ठा। राज्य ऑब्जेक्ट का आकार पास reducers की कुंजी से मेल खाता है।

संक्षेप में, अपने reducers

{ 
    marvelReducer, 
    routing 
} 

के रूप में एक राज्य संभालने के लिए तैयार कर रहे हैं लेकिन आप इसे

{ 
    characters 
} 

के रूप इसे ठीक करने के में एक प्रारंभिक राज्य सौंपने कर रहे हैं समस्या, आपको combineReducers पर characters को शामिल करने के लिए या तो उस ऑब्जेक्ट की कुंजी को बदलना होगा, जिसमें आपके रेड्यूसर की अपेक्षा की जाने वाली कुंजी शामिल करने के लिए प्रारंभिक स्थिति बदलें।

0

मैं एक ही मुद्दा है हो सकता है, और मैं नहीं कर सकता इन संभावित समाधानों में से किसी के तर्क का पालन करें।

गठबंधन करने के लिए तर्क रेड्यूसर वस्तुओं, न कि राज्य, कुंजी के संदर्भ हैं। मुख्य त्रुटि क्रिप्टिक के रूप में अधिकतर रेडक्स त्रुटियों के रूप में है, और वास्तव में उनमें से अधिकांश उत्तर या संभावित समाधान प्रदान किए जाते हैं।

+0

क्या आप पोस्ट कर सकते हैं कि आपका रेड्यूसर/राज्य कैसा दिखता है? ' फिर अपने राज्य एक चमत्कार वस्तु होते हैं और चाहिए, क्या जवाब की व्याख्या करने के प्रयास कर रहा है कि यदि आप एक जड़ कम करने की तरह ' स्थिरांक rootReducer = combineReducers ({routerReducer : marvelReducer, मार्ग चमत्कार}) लग रहा है उन सभी संपत्तियों के साथ एक रूटिंग ऑब्जेक्ट – erichardson30

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