message: Key EventTile's using txnId if it is set to prevent a remount
diff: @@ -346,9 +346,9 @@ export default class MessagePanel extends React.Component {
  }
  }
  - _isUnmounting() {
  + _isUnmounting = () => {
  return !this._isMounted;
  - }
  + };
  // TODO: Implement granular (per-room) hide options
  _shouldShowEvent(mxEv) {
  @@ -571,12 +571,10 @@ export default class MessagePanel extends React.Component {
  const readReceipts = this._readReceiptsByEvent[eventId];
  - // Dev note: `this._isUnmounting.bind(this)` is important - it ensures that
  - // the function is run in the context of this class and not EventTile, therefore
  - // ensuring the right `this._mounted` variable is used by read receipts (which
  - // don't update their position if we, the MessagePanel, is unmounting).
  + // use txnId as key if available so that we don't remount during sending
  ret.push(
  - <li key={eventId}
  + <li
  + key={mxEv.getTxnId() || eventId}
  ref={this._collectEventNode.bind(this, eventId)}
  data-scroll-tokens={scrollToken}
  >
  @@ -590,7 +588,7 @@ export default class MessagePanel extends React.Component {
  readReceipts={readReceipts}
  readReceiptMap={this._readReceiptMap}
  showUrlPreview={this.props.showUrlPreview}
  - checkUnmounting={this._isUnmounting.bind(this)}
  + checkUnmounting={this._isUnmounting}
  eventSendStatus={mxEv.getAssociatedStatus()}
  tileShape={this.props.tileShape}
  isTwelveHour={this.props.isTwelveHour}
  