web-dev-qa-db-ja.com

Immutable.jsでgetIn()は何をしますか?

残念ながら、ドキュメントは非常にまばらです:

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

誰か例がありますか?私はguessingmyObjectがある場合:

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

それ

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

バナナを返します。

ただし、不変オブジェクトはマップオブジェクトでもあるため、完全に混乱しています。

14
Oliver Watkins

短期間

map.getIn(["a", "b", "c"])map.get("a").get("b").get("c")へのショートカットです

詳細:

おそらくfromJSトラップの1つに陥ったのでしょう。電話:

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

キーMapのみを持つaを作成します。この値は、キーMapのみを持つbであり、値は、キーMapと値cのみを持つbananaです。

つまり、fromJSは指定されたオブジェクトの深部に入り、各Mapに対してObjectを定義し、各Listに対してArrayを定義します

この例では、map.getIn(["a", "b", "c"])を呼び出すことはmap.get("a").get("b").get("c")への一種のショートカットです。

しかし、mapMapとして定義する場合:

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

それはキーaのみを持つMapを作成します。この値はプレーンオブジェクト_{b: {c: "banana"}}_であり、map.get("a").get("b").get("c")を呼び出すと、map.get("a")のような_get is not a function_のようなものがスローされます。 _{b: ...}_プレーンオブジェクトを返します。

同じ理由が、map.getIn(["a", "b", "c"])が期待どおりに機能しない理由です。

28
Jevgeni