2016-04-09 7 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" 
    } 
}; 

'Immutable.js' はこれですで作成InitialTabState

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を01にマージしています上記のは次のとおりです。

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 ])を望んでいると信じて、タブのクラスを更新します。

関連する問題