Comment puis-je obtenir les résultats suivants en utilisant ImmutableJS:Dans ImmutableJS, comment insérer un nouveau tableau dans une carte?
myMap.get(key).push(newData);
Comment puis-je obtenir les résultats suivants en utilisant ImmutableJS:Dans ImmutableJS, comment insérer un nouveau tableau dans une carte?
myMap.get(key).push(newData);
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
).
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))
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