web-dev-qa-db-fra.com

que fait getIn () dans Immutable.js?

Malheureusement, la documentation est très clairsemée:

https://facebook.github.io/immutable-js/docs/#/Map/getIn

Quelqu'un at-il un exemple? Je devine que si j'ai un myObject comme ça:

  a: {
    b:{
      c:"banana"
    }
  }

cette

myObject.getIn (["a", "b", "c"])

retournera la banane.

Cependant, les objets immuables peuvent également être des objets cartographiques, ce qui me laisse complètement confus.

14
Oliver Watkins

brièvement:

map.getIn(["a", "b", "c"]) est un raccourci vers map.get("a").get("b").get("c")

En détails:

Vous êtes probablement entré dans l'un des pièges fromJS. Appel:

const map = Immutable.fromJS({a: {b: {c: "banana"}}});

crée un Map avec uniquement la clé a, dont la valeur est également un Map avec uniquement la clé b, dont la valeur est également un Map avec uniquement la clé c et la valeur banana.

Avec d'autres mots fromJS va dans le fond de l'objet fourni et définit Map pour chaque Object et un List pour chaque Array

Avec cet exemple, appeler map.getIn(["a", "b", "c"]) est une sorte de raccourci vers map.get("a").get("b").get("c")

Mais si vous définissez map comme Map:

const map = new Immutable.Map({a: {b: {c: "banana"}}});

il crée une carte, avec seulement la clé a, dont la valeur est un objet simple {b: {c: "banana"}}, et appeler une map.get("a").get("b").get("c") vous donnera quelque chose comme get is not a function, puisque map.get("a") renverra {b: ...} objet simple.

Les mêmes raisons expliquent pourquoi map.getIn(["a", "b", "c"]) ne fonctionnera pas comme vous pouvez vous y attendre.

28
Jevgeni