首页 > 解决方案 > ImmutableJS 记录合并

问题描述

我已经导入了一个不可变记录,并希望在将其用作我的应用程序的默认状态之前为其添加一个新属性。merge但是,尽管尝试了、和mergeDeep,但我根本无法添加该属性。它在所有实例中返回调用记录。看到此链接后,我决定尝试一下。mergeWithmergeDeepWithmerge

下面的代码片段模拟了我的问题

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

对不可变没有真正的经验,所以任何帮助都将不胜感激。

提前致谢

标签: javascriptmergerecordimmutable.js

解决方案


Maps 是 key-value 对象的近似值,因此请使用那些而不是 Records,因为 Records 具有不同的工厂范式“记录类似于 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>


推荐阅读