Come posso raggiungere i seguenti utilizzando ImmutableJS:In ImmutableJS, come spingere un nuovo array in una mappa?
myMap.get(key).push(newData);
Come posso raggiungere i seguenti utilizzando ImmutableJS:In ImmutableJS, come spingere un nuovo array in una mappa?
myMap.get(key).push(newData);
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
).
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))
Attenzione che arr.push restituirà non una matrice aggiornata ma una nuova dimensione ... a meno che non sia immutabile :) – kboom