我最近发现需要在我的 reducer 中进行深入合并。
我发现 icepick.merge和 lodash.merge做这份工作。
似乎icepick.merge 是一种合并和调用object.freeze 的有效方式递归地。
在使用 React reducer(和不可变性)时,什么时候应该使用 icepick 而不是 lodash?在数组和对象上调用 object.freeze 是一种好习惯吗?
最佳答案
这是一个是否强制执行不变性以及您想要什么级别的控制/抽象的问题。
lodash
lodash 为您提供了以不改变数据结构的方式处理数据结构的工具,但它不会对数据结构本身强制执行不变性。例如,没有什么可以阻止您或任何其他开发人员在使用 lodash 时改变状态。
冰锥
icepick 似乎可以让您保留现有的数据结构但卡住它们,从而允许您检查 chrome 中的数据结构并让它们像往常一样运行。我没有在项目中使用过 icepick,但我注意到有些人更喜欢它,因为它的轻量级特性以及您保留现有数据结构的事实,允许在开发工具等中检查它们。
不可变的.js
我首选的解决方法是使用 ImmutableJS使用该库提供的数据结构可以消除卡住/解冻的繁琐工作,并在整个项目中始终如一地实现不变性。 immutable 提供的数据结构内置了类似于常规 javascript 数据结构的 API,并添加了一些来自 lodash 的强大工具,如深度合并。
关于javascript - 我什么时候应该使用 icepick.merge 而不是 lodash.merge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36007046/