Fix some setState-after-unmount in roomdirectory

Give the RoomDirectory and unmounted guard, and use it to avoid some setState
warnings. Also, cancel the filterTimeout (no point in leaving it around).

There are still plenty of other opportunities to setState after unmount, but
the filterTimeout was causing noise in the test.
pull/3958/head
Richard van der Hoff 2017-05-18 13:41:54 +01:00
parent b290a28123
commit 86055bc476
1 changed files with 16 additions and 0 deletions

View File

@ -60,6 +60,7 @@ module.exports = React.createClass({
},
componentWillMount: function() {
this._unmounted = false;
this.nextBatch = null;
this.filterTimeout = null;
this.scrollPanel = null;
@ -97,6 +98,10 @@ module.exports = React.createClass({
// sideOpacity: 1.0,
// middleOpacity: 1.0,
// });
if (this.filterTimeout) {
clearTimeout(this.filterTimeout);
}
this._unmounted = true;
},
refreshRoomList: function() {
@ -139,6 +144,11 @@ module.exports = React.createClass({
return;
}
if (this._unmounted) {
// if we've been unmounted, we don't care either.
return;
}
this.nextBatch = data.next_batch;
this.setState((s) => {
s.publicRooms.push(...data.chunk);
@ -156,6 +166,12 @@ module.exports = React.createClass({
// requests either
return;
}
if (this._unmounted) {
// if we've been unmounted, we don't care either.
return;
}
this.setState({ loading: false });
console.error("Failed to get publicRooms: %s", JSON.stringify(err));
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");