使用 Immutable 深入访问普通对象

deep access in plain objects with Immutable

考虑以下示例:

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

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

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

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

关于 ImmutableJS 状态的文档:

Plain JavaScript Object or Arrays may be nested within an Immutable.js Collection, and getIn() can access those values as well

因此,如果 OrderedMap 的值是一个普通的 javascript 对象或一个不可变集合,这没有区别——但是我们可以看到,如果我们转换它,错误就会消失首先将普通对象添加到不可变集合中:

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

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

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

我相信这是因为您正在查看文档以查找比您正在使用的更新版本的库。我刚刚用 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>