javascript - ImmutableJS 记录合并
问题描述
我已经导入了一个不可变记录,并希望在将其用作我的应用程序的默认状态之前为其添加一个新属性。merge
但是,尽管尝试了、和mergeDeep
,但我根本无法添加该属性。它在所有实例中返回调用记录。看到此链接后,我决定尝试一下。mergeWith
mergeDeepWith
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
对不可变没有真正的经验,所以任何帮助都将不胜感激。
提前致谢
解决方案
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>
推荐阅读
- jquery - 提交 JQuery 表单发布请求时页面不工作
- sql - psql 中输入的 SQL 命令是属于 SQL(Postgresql 的 SQL 方言)还是 PL/PgSQL?
- launch - 如何在右舷层更改 Cobalt 启动 URL 和参数?
- wpf - DataGrid Foucs 中的可编辑组合框不起作用
- angular - Angular 服务:单例、非单例、延迟加载和 ngrx。如何提供它们?
- f# - 将数据集随机拆分为较小的集合 f#
- macos - 如何将 iTerm 带到屏幕前面或后面的快捷方式
- iterm2 - 如何使用 exit 命令关闭 iterm2 选项卡?
- android - 为什么我不能在 Fragment 中使用 Listview
- docker - 将二进制文件添加到 docker