Merge pull request #193 from matrix-org/rav/shouldComponentUpdates
Add shouldComponentUpdate() methods to RoomView and TimelinePanel
This commit is contained in:
commit
a7c75b1315
3 changed files with 43 additions and 0 deletions
|
@ -77,3 +77,34 @@ module.exports.getKeyValueArrayDiffs = function(before, after) {
|
||||||
|
|
||||||
return results;
|
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;
|
||||||
|
};
|
||||||
|
|
|
@ -38,6 +38,7 @@ var SlashCommands = require("../../SlashCommands");
|
||||||
var dis = require("../../dispatcher");
|
var dis = require("../../dispatcher");
|
||||||
var Tinter = require("../../Tinter");
|
var Tinter = require("../../Tinter");
|
||||||
var rate_limited_func = require('../../ratelimitedfunc');
|
var rate_limited_func = require('../../ratelimitedfunc');
|
||||||
|
var ObjectUtils = require('../../ObjectUtils');
|
||||||
|
|
||||||
var DEBUG = false;
|
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() {
|
componentWillUnmount: function() {
|
||||||
// set a boolean to say we've been unmounted, which any pending
|
// set a boolean to say we've been unmounted, which any pending
|
||||||
// promises can use to throw away their results.
|
// promises can use to throw away their results.
|
||||||
|
|
|
@ -24,6 +24,7 @@ var EventTimeline = Matrix.EventTimeline;
|
||||||
var sdk = require('../../index');
|
var sdk = require('../../index');
|
||||||
var MatrixClientPeg = require("../../MatrixClientPeg");
|
var MatrixClientPeg = require("../../MatrixClientPeg");
|
||||||
var dis = require("../../dispatcher");
|
var dis = require("../../dispatcher");
|
||||||
|
var ObjectUtils = require('../../ObjectUtils');
|
||||||
|
|
||||||
var PAGINATE_SIZE = 20;
|
var PAGINATE_SIZE = 20;
|
||||||
var INITIAL_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() {
|
componentWillUnmount: function() {
|
||||||
// set a boolean to say we've been unmounted, which any pending
|
// set a boolean to say we've been unmounted, which any pending
|
||||||
// promises can use to throw away their results.
|
// promises can use to throw away their results.
|
||||||
|
|
Loading…
Reference in a new issue