为什么不可变映射和记录的 属性 访问器方法不同?
Why are property accessor methods different for Immutable Maps and Records?
我将 Immutable JS 与 React + Redux 结合使用。在大多数情况下,我真的很喜欢它如何加强 Redux 范式,除了它的 属性 访问器方法。
对于不可变 Map
,必须使用不可变 get
方法访问属性。
例如。 this.props.exampleMap.get('mapProperty');
然而,对于 Immutable Record
s,没有 get 方法。相反,您只需像普通 JS 对象一样使用点方法访问属性。
例如。 this.props.exampleRecord.recordProperty
我的问题是,为什么会出现这种差异?这让我有点强迫症,因为我的组件现在充满了这两种方法的混合,坦率地说,它有点难看。
您实际上可以使用 .get(...)
来获取不可变记录。我想到的方法是,通过允许您直接访问属性,记录具有额外更好的语法。
如果您 take a look at the type definitions 记录,您会看到记录构造函数创建类型为 Immutable.Map<string, any>
的对象。
这种更好的语法是可能的,因为您在创建时预定义了记录的属性。
这里是不可变记录创建示例 directly from their docs
const { Record } = require('immutable')
const ABRecord = Record({ a: 1, b: 2 })
const myRecord = new ABRecord({ b: 3 })
所以请记住,您为 Record
函数提供了一个具有默认值的对象,它 returns 一个构造函数,您可以使用它来创建具有 new
.
的对象
我将 Immutable JS 与 React + Redux 结合使用。在大多数情况下,我真的很喜欢它如何加强 Redux 范式,除了它的 属性 访问器方法。
对于不可变 Map
,必须使用不可变 get
方法访问属性。
例如。 this.props.exampleMap.get('mapProperty');
然而,对于 Immutable Record
s,没有 get 方法。相反,您只需像普通 JS 对象一样使用点方法访问属性。
例如。 this.props.exampleRecord.recordProperty
我的问题是,为什么会出现这种差异?这让我有点强迫症,因为我的组件现在充满了这两种方法的混合,坦率地说,它有点难看。
您实际上可以使用 .get(...)
来获取不可变记录。我想到的方法是,通过允许您直接访问属性,记录具有额外更好的语法。
如果您 take a look at the type definitions 记录,您会看到记录构造函数创建类型为 Immutable.Map<string, any>
的对象。
这种更好的语法是可能的,因为您在创建时预定义了记录的属性。
这里是不可变记录创建示例 directly from their docs
const { Record } = require('immutable') const ABRecord = Record({ a: 1, b: 2 }) const myRecord = new ABRecord({ b: 3 })
所以请记住,您为 Record
函数提供了一个具有默认值的对象,它 returns 一个构造函数,您可以使用它来创建具有 new
.