2 ecmascript-6 immutable.js es6-map
我是immutable.js的新手。来自immutable.js的map和来自ES6的map有什么区别?如果没有区别,为什么我们需要使用immutable.js?
const { Map } = require('immutable')
const map1 = Map({ a: 1, b: 2, c: 3 })
const map2 = map1.set('b', 50)
map1.get('b') // 2
map2.get('b') // 50
Run Code Online (Sandbox Code Playgroud)
var myMap = new Map();
myMap.set(NaN, 'not a number');
myMap.get(NaN); // "not a number"
Run Code Online (Sandbox Code Playgroud)
在Immutable.js映射上运行set时,修改其中包含的数据,它将在内存中具有不同的地址。这意味着map1 !== map2在您的第一个示例中,而相同的代码可能会说使用ES6映射时它们是相同的。
人们之所以真正关心带有不同数据的地图,!==是因为诸如React,Flux和Redux之类的工具都依赖于快速检查状态是否发生了变化。这===是您可以使用的最快的检查方法,但实际上是在比较两端引用的内存地址。
如果更改该对象的内容,则内存地址可能仍然相同,因为出于性能原因Javascript使用浅表副本。Immutable.js很好地保证了不变性-无法更改对象。如果您更改地图,现在是新地图。这意味着===比较总是正确的。
如果您不使用那些状态管理库之一,而是因为它很流行而仅使用Immutable.js,那么您可能不必这样做!即使您正在使用这些库,也有其他方法可以保证不变性---我发现它dot-prop-immutable可以提供所需的功能,并且开销较小。