2016-06-08 10 views

risposta

13

Ciò accade perché la chiave 'selector' ha un valore non-Map. setIn funzionerà se facciamo in modo che il valore per 'selector' è anche un Immutabile Mappa:

var map1 = Immutable.Map({ 'selector': Immutable.Map({ 'type': 'bar' })}); 
 
var map2 = map1.setIn(['selector', 'type'], 'foo'); 
 
console.log(map1.toJS()); 
 
console.log(map2.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

Per convertire profondamente oggetti JavaScript e array di mappe ed elenchi che è possibile utilizzare fromJS(). Così è più facile scrivere:

var map3 = Immutable.fromJS({ 'selector': { 'type': 'bar' }}); 
 
var map4 = map3.setIn(['selector', 'type'], 'foo'); 
 
console.log(map3.toJS()); 
 
console.log(map4.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

+0

Quindi, se ho un oggetto di nidificazione che voglio apportare modifiche per devo mappare in modo ricorsivo ogni livello di nidificazione manualmente? Questo sembra un po ', beh, ingombrante. – hally9k

+0

Questo era per illustrazione. Puoi usare ['fromJS()'] (https://facebook.github.io/immutable-js/docs/#/fromJS) per convertire profondamente oggetti e array JavaScript in Maps ed elenchi. – 1983