当我们设置原始值时,如果该值与现有值相同,则不会创建新引用。
const Map = Immutable.Map;
const map1 = Map( {a: 1, b: 2, c: 3 })
const map2 = map1.set('b', 2)
console.log(map1.equals(map2)) // gives true

<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
&#13;
但是,如果我们设置一个对象,它将始终创建一个新的引用
const Map = Immutable.Map;
const map1 = Map( {a: 1, b: {trial: 'value'}, c: 3 })
const map2 = map1.set('b', {trial: 'value'})
console.log(map1.equals(map2)) // gives false
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
&#13;
我该如何避免?如果值完全相同,则不应创建新引用。
答案 0 :(得分:0)
Map
不会将值深度转换为不可变对象,例如您的代码存储两个不同的对象。但是,如果用Map
或fromJS
包裹对象,则可以解决此问题。
const Map = Immutable.Map;
const map1 = Map( {a: 1, b: Map({trial: 'value'}), c: 3 })
const map2 = map1.set('b', Map({trial: 'value'}))
console.log(map1.equals(map2)) // gives false
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
&#13;