getIn()在Immutable.js中做了什么?

Oli*_*ins 14 javascript immutable.js

不幸的是,文档很稀疏:

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

有人有例子吗?我猜如果我有一个像这样的myObject:

  a: {
    b:{
      c:"banana"
    }
  }
Run Code Online (Sandbox Code Playgroud)

那

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

将返回香蕉.

但是,不可变对象也可以是映射对象,这让我彻底迷茫.

Jev*_*eni 30

不久:

map.getIn(["a", "b", "c"]) 是一个快捷方式 map.get("a").get("b").get("c")

详情如下:

你可能已陷入其中一个fromJS陷阱.致电:

const map = Immutable.fromJS({a: {b: {c: "banana"}}});
Run Code Online (Sandbox Code Playgroud)

创建一个Map只有键a,其值也是一个Map只有键b,其值也Map只有键c和值banana.

与其他词fromJS进入所提供的对象的深,并定义Map为每个Object和一个List用于每个Array

在这个例子中,调用map.getIn(["a", "b", "c"])是一种快捷方式map.get("a").get("b").get("c")

但是如果你定义map为Map:

const map = new Immutable.Map({a: {b: {c: "banana"}}});
Run Code Online (Sandbox Code Playgroud)

它创建了一个Map,只有key a,它的值是普通对象{b: {c: "banana"}},并且调用a map.get("a").get("b").get("c")会抛出类似的东西get is not a function,因为它map.get("a")会返回{b: ...}普通对象.

同样的原因是为什么map.getIn(["a", "b", "c"])不能像你期望的那样工作.