2015-07-27 6 views

Répondre

33

Vous pouvez le faire comme suit: (voir ce 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"] 
// } 
// } 

Depuis myMap est immuable, chaque fois que vous essayez de définir/mettre à jour/supprimer certains données à l'intérieur, il renverra une référence aux nouvelles données. Donc, vous devrez le mettre à une variable afin d'y accéder (dans ce cas, myNewMap).

+0

Attention, arr.push ne retournera pas un tableau mis à jour lui-même mais une nouvelle taille de celui-ci ... sauf si c'est immuable aussi :) – kboom

7

Si le tableau référencé à la clé est une plaine javascript array - alors vous muter en fait cette valeur - de sorte que votre code ne fonctionnera comme prévu (c.-à- - myMap contiendra un tableau mutable/muté à 'key' avec le newData enfoncé.) Cependant, ce genre de défait le but de l'immutabilité, donc je recommanderais que la clé dans myMap référence une Immutable.List. Dans ce cas, vous aurez envie de faire:

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