2016-04-09 10 views
1

Ich verwende React, Redux & unveränderlich hier. Die Frage bezieht sich auf das Zusammenführen eines einfachen Js-Objekts in Immutable Map obj.Verschmelzen von Objekten mit unveränderlichen js

Importieren Immutable.js:

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

action.payload ist dies:

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

InitialTabState erstellt mit 'Immutable.js' ist folgende:

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

Die Abschwächer-Funktion, die fusioniert die action.payload an der Spitze, in die InitialTabState oben ist dies:

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" ]) 
       ); 
      }) 
     ); 
    ... 
}; 

Allerdings scheint nichts zu passieren. Ich bekomme keinen Fehler, das Ausgabeobjekt bleibt identisch mit InitialTabState, wenn die Eigenschaft tabClass darin sich gemäß der Zusammenführungsfunktion von Immutable.js ändern sollte.

+0

Wie erwartet der Zustand, wenn er vom Reduzierer zurückkehrt? – max

Antwort

1

obj.merge(payload[ curObjName ][ "tabName" ]) Verschmelzen einer Eigenschaft, die nicht in der Nutzlast vorhanden ist. Ich glaube, Sie wollen obj.merge(payload[ curObjName ]), die die Klassen der Registerkarte aktualisiert werden.

Verwandte Themen