2016-04-14 120 views
1

当我看着一个正在通过combineReducers调用的reducer时,它没有获得参数中的状态或动作。为什么Redux中没有组合减速器接收状态?

我减速的文件是这样的:

import { combineReducers } from 'redux'; 
import nav from './reducers/nav'; 
import pages from './reducers/pages'; 
import entities from './reducers/entities'; 

export default function(initialData) { 

    return function(state, action) { 
    if (!state) { 
     console.log('no state', initialData); 
     return initialData; 
    } 

    // This is showing state as having expected value 
    console.log('state', state); 

    return combineReducers({ 
     nav, 
     pages, 
     entities 
    }); 
    } 
}; 

我店初始化是这样的:

import reducerWrapper from './reducers'; 

// Initial state is defined above 
var reducers = reducerWrapper(initialState), 
    store = Redux.createStore(reducers, initialState); 

example code on the site不使用包装(这是我在其他一些例子见过)。我也尝试过,并没有奏效。我的意思是在任何一个例子中,我都不确定如果写出来的内容会如何得到状态/动作。我觉得我在这里错过了一些魔法。

更新 这里是减速器现在文件:其次是store = Redux.createStore(reducerWrapper, initialState)

import { combineReducers } from 'redux'; 
import nav from './reducers/nav'; 
import pages from './reducers/pages'; 
import entities from './reducers/entities'; 

export default combineReducers({ 
    nav, 
    pages, 
    entities 
}); 

,也不能正常工作,甚至当我删除了包装内reducerWrapper,只是出口默认combineReducers`

回答

1

答案是不容易在这里看到。问题是我的减速器没有默认状态。

商店触发这里的INIT事件:https://github.com/reactjs/redux/blob/master/src/createStore.js#L204

它然后最终到达这里: https://github.com/reactjs/redux/blob/master/src/combineReducers.js#L52

意义,如果我的减速器是function (state, action) { return state }而非function (state='anyDefaultValue') { return state }combineReducer将错误,指出该减速没有返回状态

0

combineReducers返回一个函数,需要调用stateaction。您可以只导出直接:

const rootReducer = combineReducers(...); 
export default rootReducer; 

或者你可以把它包装成你现在是:

const rootReducer = combineReducers(...); 
export default function (initialData) { 
    return function (state, action) { 
    if (!state) { 
     console.log('no state', initialData); 
     return initialData; 
    } 

    // This is showing state as having expected value 
    console.log('state', state); 

    return rootReducer(state, action); 
    } 
} 
相关问题