2015-07-27 1 views

risposta

33

Si può fare come segue: (vedi questo JSBin)

const myMap = Immutable.fromJS({ 
    nested: { 
    someKey: ['hello', 'world'], 
    }, 
}); 

const myNewMap = myMap.updateIn(['nested', 'someKey'], arr => arr.push('bye')); 

console.log(myNewMap.toJS()); 
// { 
// nested: { 
// someKey: ["hello", "world", "bye"] 
// } 
// } 

Dal myMap è immutabile, ogni volta che si tenta di impostare/aggiornamento/cancellare alcuni dati al suo interno, restituirà un riferimento ai nuovi dati. Quindi, dovresti impostarlo su una variabile per accedervi (in questo caso, myNewMap).

+0

Attenzione che arr.push restituirà non una matrice aggiornata ma una nuova dimensione ... a meno che non sia immutabile :) – kboom

7

Se la matrice si fa riferimento alla chiave è una semplice javascript array - allora si sarà effettivamente mutare tale valore - così il vostro codice funzionerà come previsto (cioè - myMap conterrà un array mutabile/mutato in "chiave" con newData inserito.) Tuttavia, questo tipo di sconfigge lo scopo dell'immutabilità, quindi consiglierei che la chiave in myMap faccia riferimento a Immutable.List. Nel qual caso si vorrà fare:

var newMap = myMap.set('key', myMap.get('key').push(newData))