2016-07-09 16 views
2

Kann reactive-redux noch von sollteComponentUpdate verwenden, wenn ich Immutable.js verwende? Die connect() -Methode verwendet shallowEqual in sollteComponentUpdate(), aber ich sehe aus der Immutable.js docs, dass wir Unquellable eigenen equals() -Methode verwenden müssen, um Gleichheit anstelle der === -Operator (die shallowEqual verwendet)Immutablejs und shouldComponentUpdate

Bedenken Sie:

const map1 = Immutable.Map({a:1, b:2, c:3}); 
const map2 = Immutable.Map({a:1, b:2, c:3}); 

map1 === map2 // returns false 
map1.equals(map2) // returns true 

Antwort

3

der ganze Sinn der immutable.js verwendet, ist die Referenz zu halten, wenn das zugrunde liegende Objekt tatsächlich nicht ändern. Die shallowEqual führt eine schnelle Überprüfung der Gleichheit zwischen der Eigenschaft, das ist ein großer Vorteil gegenüber einem tiefen Vergleichswert mit immutable.equals.

Beispiel:

let state = Immutable.Map({a: 1, b:2, c:3)} 

let state2 = state.set('a', 1) 

state === state2 //true because Immutable returns the same reference object since there is no changes 

In Ihrem Beispiel explizit zwei verschiedene Immutable.Map Objekte zuweisen, so sind es zwei verschiedene Objekte im Speicher und map1 === map2 kehren false.