0
我一直在寻找我的一些reducer的表现,并注意到一些奇怪的行为,这与我如何合并mergeDeep工作是相反的。我认为merge和mergeDeep的工作原理是一样的,除了比较最高级别的键/值之后,合并停止但mergeDeep继续挖掘。合并vs MergeDeep
例如:
let obj1 = Map({
a: Map({
b: Map({
c: 10
})
})
});
let obj2 = obj1;
obj1 = obj1.mergeIn(['a'], Map({
b: Map({
c: 10
})
}));
console.log(obj1.toJS()) // { a: { b: { c : 10 } } }
console.log(obj1 === obj2) // false
VS
let obj1 = Map({
a: Map({
b: Map({
c: 10
})
})
});
let obj2 = obj1;
obj1 = obj1.mergeDeepIn(['a'], Map({
b: Map({
c: 10
})
}));
console.log(obj1.toJS()) // { a: { b: { c: 10 } } }
console.log(obj1 === obj2) // true
任何人都可以解释为什么他们不都返回true?如果我必须使用mergeDeep,这不会是一个巨大的性能损失吗?或者我不会重新渲染的事实常常超过它?
我其实并不是现在的原因,但是如果你想在不可变的数据结构上使用等式检查(例如应该更新对反应组件的检查),你需要使用Immutable.is(obj1,obj2)。 – erdysson