使用Immutable进行普通对象的深度访问

时间:2018-02-28 09:04:58

标签: immutable.js

考虑以下示例:

const stickers = 
  new OrderedMap().set(1, {hero: "batman", name: "Bruce"});

stickers.getIn([1]); //=> { hero: 'batman', name: 'Bruce' }

stickers.getIn([1, "hero"]); //=> undefined

为什么第二个getIn的结果未定义?

关于ImmutableJS状态的文档:

  

普通JavaScript对象或数组可以嵌套在Immutable.js集合中,getIn()也可以访问这些值

因此,如果OrderedMap的值是普通的javascript对象或不可变的集合,那么它没有区别 - 但是我们可以看到,如果我们将该普通对象转换为Immutable Collection,则该bug就会消失第一:

const stickers = 
  new OrderedMap().set(1, fromJS({hero: "batman", name: "Bruce"}));

stickers.getIn([1]); //=> { hero: 'batman', name: 'Bruce' }

stickers.getIn([1, "hero"]); //=> 'batman'

1 个答案:

答案 0 :(得分:0)

我认为这是因为您正在查看文档以获取新版本的库而不是您正在使用的文档。我刚用版本4.0.0-rc.9试用了你的代码,它按预期工作。

例如:



const stickers =
  Immutable.OrderedMap().set(1, {
    hero: "batman",
    name: "Bruce"
  });

console.log(stickers.getIn([1]));

console.log(stickers.getIn([1, "hero"])); // 

<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/4.0.0-rc.9/immutable.js"></script>
&#13;
&#13;
&#13;