2016-09-29 32 views
1

當我直接使用Redux的減速機,我得到預期的狀態:使用終極版combineReducers是創建一個嵌套的狀態

import cheese from 'reducers/cheese.js'; 

const store = createStore(cheese); 

<Provider store={ store } > 
    ... 
</Provider> 

結果:

cheese: "cheddar" 

但是當我使用combineReducer我得到一個嵌套狀態

import cheese from 'reducers/cheese.js'; 
import crackers from 'reducers/crackers.js'; 

const reducer = combineReducers({ cheese, crackers }); 

const store = createStore(reducer); 

<Provider store={ store } > 
    ... 
</Provider> 

結果:

cheese: { cheese: "cheddar" } 

這導致淺狀態比較驗證,並且我的組件不更新。 (編輯:這種假設可能是假的)

編輯:

我的理想狀態是這樣的(這是個什麼樣子使用單個減速時等):

{ 
cheese: "cheddar", 
crackers: "ritz" 
} 

編輯:

我的減速器是這樣的(兩者相同):

const initialState = { 
    cheese: 'cheddar' 
}; 

export default function reducer(state = initialState, action = {}) { 
    switch (action.type) { 
    case 'newCheese': 
     console.log(action.newCheese); // "cheddar" 
     return { 
     ...state, 
     cheese: action.newCheese 
     }; 
    default: 
    return state; 
    } 
} 
+1

這是combineReducers'的'的目標,所以我不知道你的問題是什麼,因爲它的表現如預期。你的'奶酪'減速器似乎會返回一個對象,而不是一個值。 – RIAstar

+0

你想如何結合奶酪和薄脆餅乾來照顧國家?你可以編輯你的問題,並提供您的預期輸出? –

+0

我編輯了這個問題 - 謝謝! – Sauce

回答

0

combineReducers發生在一個對象 - 嘗試:

const reducer = combineReducers({ cheese, crackers }); 
+0

謝謝,你是正確的,它確實需要一個對象。我錯誤地從我的活動項目中複製了代碼,在那裏我傳遞了一個對象,所以不幸的是這不是問題。 – Sauce