2016-04-09 25 views
1

我正在使用React,Redux &這裏不可變。問題是關於將一​​個普通的Js對象合併到Immutable Map obj中。將對象與不可變的js合併

導入Immutable.js:

import { List as iList, 
     Map as iMap } from "immutable"; 

action.payload是這樣的:

{ 
    Preview : { 
     tabClass : "tabPreview tab activeTab" 
    }, 
    Body : { 
     tabClass : "tabBody tab" 
    }, 
    Sleeve : { 
     tabClass : "tabSleeve tab" 
    } 
}; 

InitialTabState與 'Immutable.js' 創建是這樣的:

const initialTabState = iList.of(
    iMap({ 
     tabClass : "tabPreview tab activeTab", 
     tabName : "Preview" 
    }), 
    iMap({ 
     tabClass : "tabBody tab", 
     tabName : "Body" 
    }), 
    iMap({ 
     tabClass : "tabSleeve tab", 
     tabName : "Sleeve" 
    }) 
); 

減速器功能,這正在合併頂部的action.payload,進入InitialTabState以上是這樣的:

const tabsState = (state = initialTabState, action) => { 
    let payload = action.payload; 
    switch(action.type) { 
    case(ENABLE_TAB): 
     return (
      state.map((obj) => { 
       let curObjName = obj.get("tabName"); 
       return (
        obj.merge(payload[ curObjName ][ "tabName" ]) 
       ); 
      }) 
     ); 
    ... 
}; 

然而,似乎沒有任何事情發生。我沒有收到任何錯誤,輸出對象與InitialTabState保持一致,當它的屬性tabClass應該根據來自Immutable.js的合併函數進行更改時。

+0

你認爲從減速機返回時狀態如何? – max

回答

1

obj.merge(payload[ curObjName ][ "tabName" ])合併在有效負載上不存在的屬性。我相信你想要obj.merge(payload[ curObjName ]),它會更新選項卡的類。