2016-04-14 7 views
1

combineReducersで呼び出されている減速機を見ると、引数に状態や動作が得られません。combinedReducersが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

それは、最終的にここにするために取得します。私の減速がfunction (state, action) { return state }いうよりfunction (state='anyDefaultValue') { return state }であれば、combineReducerは減速が戻らなかったというエラーメッセージが表示されます意味 https://github.com/reactjs/redux/blob/master/src/combineReducers.js#L52

状態

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); 
    } 
}