像普通旧 Javascript 对象一样获取地图值

Get Map value like plain old Javascript objects

我是 Immutable.js 的新手,所以这是一个非常微不足道的问题。

看起来我无法像使用普通旧 Javascript 对象那样获得 Map 值,例如myMap.myKey。显然我必须写 myMap.get('myKey')

我对这种行为感到非常惊讶。这是有原因的吗? Immutable.js 是否有任何扩展允许我输入 myMap.myKey?

回来详细说明我的评论,但 SO 不允许在一定时间后这样做。将其转换为答案。

你问的问题已经与那些从不可变开始新的人进行了多次交流,你的问题确实包括在内。它在 我刚才写过。

当你从不变性的角度来看它时,它就开始有意义了。如果您将值类型公开为您自己的属性,它们将不会是不可变的,因为它们是值类型并且可以分配给。

尽管如此,将这些吸气剂散布在您的 components/views 中还是令人沮丧的。如果你负担得起,你应该尝试use the Record type。它提供对成员的传统访问(IE 8 除外)。更好的是,您可以从这种类型扩展并添加助手 getters/setters(例如 user.getName()user.setName('thebat') 而不是 user.get('name')/set('name', 'thebat'))以从您的视图中抽象模型的内部结构。然而,还有一些挑战需要克服,比如嵌套结构和对象的反序列化。

如果以上不是你的菜,我建议你吞下苦果:)。

我认为您错过了构建 Immutable 的概念:

Immutable data cannot be changed once created, leading to much simpler application development, no defensive copying, and enabling advanced memoization and change detection techniques with simple logic. Persistent data presents a mutative API which does not update the data in-place, but instead always yields new updated data.

您可以通过某种方式将不可变数据结构转换为普通的旧 JS 对象,如:myMap.toJS()