ImmutableJS记录合并

时间:2018-08-14 10:23:06

标签: javascript merge record immutable.js

我已经导入了一个不可变的记录,并希望在将其用作应用程序的默认状态之前为其添加新属性。但是,尽管尝试了mergemergeDeepmergeWithmergeDeepWith,但我根本无法添加该属性。它在所有实例中返回调用记录。看到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

对可变性没有真正的经验,所以我们将不胜感激。

预先感谢

1 个答案:

答案 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>