2016-12-28 117 views
0

我試圖用一個例子來研究redux流程。但是陷入了兩者之間。這裏是相同的plunkr鏈接。還原狀態更新不正確

function combineReducers(currentState, action) { 

    var nextState = Object.assign({}, currentState); 

    /*On load placeholder details for all thumbnails*/ 
    var placeholder = { 
     urlPath: "http://placehold.it/640x480", 
     header: "PLACEHOLDER", 
     description: "Description text for the above image" 
    }; 
    if (currentState === undefined) {  
     nextState = placeholder; 
     return nextState; 
    } 
    //Problem here i guess 
    nextState = { 
     animals : animalReducer(nextState.animals, action),  
     architecture : architectureReducer(nextState.architecture, action)  
    } 

    return nextState; 
} 

應用程序加載初始狀態爲將所有媒體元素設置爲佔位符。 (這是工作) 在個別按鈕點擊,它應該獲取每個類別的細節,只填充這些媒體元素。

問題:

當我點擊執行按鈕,或1層2的元件正在更新 在一起。理想的情況是我期待在4

我還沒有實現3和4 點擊元素1,元素2架構的細節,自然得到3 人們只動物細節,我相信,如果這個作品,那麼它將更多地爲每個狀態添加額外的動作和縮減器。

我覺得問題出在rootReducer.js第19行或者index.js第34或37行,但不知道如何繼續!任何指針都會有很大的幫助!今天我頭上已經掉了很多頭髮!

PS:我知道的jQuery做的是一種污物的,但只是爲了學習的目的!

高級感謝幫助者! 乾杯。

回答

1

https://plnkr.co/edit/WDyQHy5tftm2EX6AFQ9j?p=preview

var defaultState = { 
    animals: Object.assign({}, placeholder), 
    architecture: Object.assign({}, placeholder) 
}; 

if (currentState === undefined) {  
    nextState = defaultState; 
    return nextState; 
} 
nextState = { 
    animals : animalReducer(nextState.animals, action),  
    architecture : architectureReducer(nextState.architecture, action)  
} 
  1. 的減速沒有在默認情況下返回原來的狀態

  2. 默認狀態格式,並將合併的減速狀態格式是不同的

+0

感謝您的工作!確實有幫助 –

1

在這兩個animalReducerarchitectureReducer你需要在default:情況下返回currentState,否則你最好null另一部分,每次有新的變化。 nextState未在default:中定義。

減速機默認不會對狀態做任何事情,它必須保持不變。只有存在匹配的操作時,它纔會創建一個具有更新狀態的新對象。這裏的事情是你不遵守這個規則,並且偶然地將狀態默認爲空。

+0

@ donmatrin,感謝您的解釋!作爲有用的......更新後的plunk也有幫助!感謝您的快速轉身, –