我什么时候应该使用 icepick.merge 而不是 lodash.merge

When should I be using icepick.merge over lodash.merge

我最近发现需要在我的减速器中进行深入合并。

我发现 icepick.merge and lodash.merge 都可以完成这项工作。

看来 icepick.merge 是一种递归合并和调用 object.freeze 的有效方法。

在使用 React reducer(和不可变性)时,什么时候应该使用 icepick 而不是 lodash?在数组和对象上调用 object.freeze 是一种好习惯吗?

这是一个是否强制不变性的问题,以及你想要什么级别的控制/抽象。

lodash

lodash 为您提供了以不改变数据结构的方式处理数据结构的工具,但它不会对数据结构本身强制执行不变性。例如,在使用 lodash 时,没有什么可以阻止您或任何其他开发人员改变状态。

icepick

icepick 似乎可以让您保留现有的数据结构但冻结它们,从而允许您检查 chrome 中的数据结构并让它们像往常一样运行。我没有在项目中使用过 icepick,但我注意到有些人更喜欢它,因为它的轻量级特性以及您保留现有数据结构的事实,允许在开发工具等中检查它们。

Immutable.js

我首选的解决方法是 ImmutableJS 使用此库提供的数据结构来消除冻结/解冻的繁琐工作,并在整个项目中始终如一地实施不变性。 immutable 提供的数据结构内置于 API 中,类似于常规 javascript 数据结构,并添加了一些来自 lodash 的强大工具,如深度合并。