what does getIn() do in Immutable.js?

余生颓废 提交于 2019-12-21 07:12:13

问题


Unfortunately the documentation is very sparse :

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

Does anyone have an example? I am guessing that if I have a myObject like so :

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

that

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

will return banana.

However the immutable objects can also be map objects which leaves me thoroughly confused.


回答1:


Shortly:

map.getIn(["a", "b", "c"]) is a shortcut to map.get("a").get("b").get("c")

In details:

You have probably got into one of the fromJS traps. Calling :

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

creates a Map with only key a, which's value is also a Map with only key b, which's value is also a Map with only key c and value banana.

With other words fromJS goes into the deep of the object provided, and defines Map for each Object and a List for each Array

With this example, calling map.getIn(["a", "b", "c"]) is kind of a shortcut to map.get("a").get("b").get("c")

But if you define map as a Map:

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

it creates a Map, with only key a, which's value is plain object {b: {c: "banana"}}, and calling a map.get("a").get("b").get("c") will throw you something like get is not a function, since map.get("a") will return {b: ...} plain object.

Same reasons are why map.getIn(["a", "b", "c"]) will not work as you might expect.



来源:https://stackoverflow.com/questions/43515723/what-does-getin-do-in-immutable-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!