web-dev-qa-db-fra.com

Pourquoi Immutable.js envoie un chemin de clé non valide sur Map.setIn ()

Je dois manquer quelque chose ici parce que les Docs font comme si le code ci-dessous devrait très bien fonctionner mais j'obtiens une erreur de chemin de clavier invalide ... Vérifiez ce codepen .

var map1 = Immutable.Map({ 'selector': { 'type': 'bar' }});
var map2 = map1.setIn(['selector', 'type'], 'foo');
console.log(map2.toJS());
19
hally9k

Cela se produit car la clé 'selector' A une valeur non-Map. setIn fonctionnera si nous nous assurons que la valeur de 'selector' est également une carte immuable:

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>

Pour convertir en profondeur des objets et des tableaux JavaScript en cartes et listes, vous pouvez utiliser fromJS() . Vous pouvez donc plus facilement écrire:

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>
33
1983