我已经导入了一个不可变的记录,并希望在将其用作应用程序的默认状态之前为其添加新属性。但是,尽管尝试了merge
,mergeDeep
,mergeWith
和mergeDeepWith
,但我根本无法添加该属性。它在所有实例中返回调用记录。看到this link之后,我决定尝试merge
。
下面的代码段模拟了我的问题
a = Immutable.Record({a:1, b:2})
b = a()
c = Immutable.Record({z:12})
d = c()
e = b.merge(d)
console.log(e.toJS())
e = b.mergeDeep(d)
console.log(e.toJS())
e = b.mergeWith(d)
console.log(e.toJS())
e = b.mergeDeepWith(d)
console.log(e.toJS())
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>
这不适用于v3.8.2
,即使使用v4.0.0-rc-9
,在所有情况下都返回b
。我正在寻找使用3.8.2
本身的解决方案,而不必使用merge
对可变性没有真正的经验,所以我们将不胜感激。
预先感谢
答案 0 :(得分:1)
映射是键值对象的近似值,因此请使用映射代替那些具有不同工厂范式的记录”“记录类似于JS对象,但是强制使用一组特定的允许字符串键,并且具有默认值。 “。
const a = Immutable.Map({ a: 1, b: 2 }); // or Immutable.fromJS({ ... })
const b = Immutable.Map({ z:12 });
const c = a.merge(b);
console.log(c);
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.js"></script>