Merge pull request #193 from matrix-org/rav/shouldComponentUpdates

Add shouldComponentUpdate() methods to RoomView and TimelinePanel
This commit is contained in:
Richard van der Hoff 2016-03-07 11:50:38 +00:00
commit a7c75b1315
3 changed files with 43 additions and 0 deletions

View file

@ -77,3 +77,34 @@ module.exports.getKeyValueArrayDiffs = function(before, after) {
return results;
};
/**
* Shallow-compare two objects for equality: each key and value must be
* identical
*/
module.exports.shallowEqual = function(objA, objB) {
if (objA === objB) {
return true;
}
if (typeof objA !== 'object' || objA === null ||
typeof objB !== 'object' || objB === null) {
return false;
}
var keysA = Object.keys(objA);
var keysB = Object.keys(objB);
if (keysA.length !== keysB.length) {
return false;
}
for (var i = 0; i < keysA.length; i++) {
var key = keysA[i];
if (!objB.hasOwnProperty(key) || objA[key] !== objB[key]) {
return false;
}
}
return true;
};

View file

@ -38,6 +38,7 @@ var SlashCommands = require("../../SlashCommands");
var dis = require("../../dispatcher");
var Tinter = require("../../Tinter");
var rate_limited_func = require('../../ratelimitedfunc');
var ObjectUtils = require('../../ObjectUtils');
var DEBUG = false;
@ -164,6 +165,11 @@ module.exports = React.createClass({
}
},
shouldComponentUpdate: function(nextProps, nextState) {
return (!ObjectUtils.shallowEqual(this.props, nextProps) ||
!ObjectUtils.shallowEqual(this.state, nextState));
},
componentWillUnmount: function() {
// set a boolean to say we've been unmounted, which any pending
// promises can use to throw away their results.

View file

@ -24,6 +24,7 @@ var EventTimeline = Matrix.EventTimeline;
var sdk = require('../../index');
var MatrixClientPeg = require("../../MatrixClientPeg");
var dis = require("../../dispatcher");
var ObjectUtils = require('../../ObjectUtils');
var PAGINATE_SIZE = 20;
var INITIAL_SIZE = 20;
@ -146,6 +147,11 @@ var TimelinePanel = React.createClass({
}
},
shouldComponentUpdate: function(nextProps, nextState) {
return (!ObjectUtils.shallowEqual(this.props, nextProps) ||
!ObjectUtils.shallowEqual(this.state, nextState));
},
componentWillUnmount: function() {
// set a boolean to say we've been unmounted, which any pending
// promises can use to throw away their results.