From 05c3a4cc31635807350b49669c3d74785526fc0c Mon Sep 17 00:00:00 2001 From: BenHodgson Date: Fri, 3 May 2024 15:12:42 +1000 Subject: [PATCH 1/3] disable batching for _onChange listener --- src/google_map_markers.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/google_map_markers.js b/src/google_map_markers.js index e2fbb666..9098fd94 100644 --- a/src/google_map_markers.js +++ b/src/google_map_markers.js @@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; // utils import omit from './utils/omit'; import shallowEqual from './utils/shallowEqual'; +import { flushSync } from 'react-dom'; const mainStyle = { width: '100%', @@ -109,12 +110,14 @@ export default class GoogleMapMarkers extends Component { const prevChildCount = (this.state.children || []).length; const state = this._getState(); - this.setState( - state, - () => - (state.children || []).length !== prevChildCount && - this._onMouseChangeHandler() - ); + flushSync(() => { + this.setState( + state, + () => + (state.children || []).length !== prevChildCount && + this._onMouseChangeHandler() + ); + }); }; _onChildClick = () => { From 69f2e141011dd52d519eaf49a3c89fe3b01a16f7 Mon Sep 17 00:00:00 2001 From: BenHodgson Date: Fri, 3 May 2024 15:18:57 +1000 Subject: [PATCH 2/3] correctly reset cache --- src/google_map_markers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/google_map_markers.js b/src/google_map_markers.js index 9098fd94..06224e96 100644 --- a/src/google_map_markers.js +++ b/src/google_map_markers.js @@ -94,7 +94,7 @@ export default class GoogleMapMarkers extends Component { this.props.dispatcher.removeListener('kON_CLICK', this._onChildClick); this.props.dispatcher.removeListener('kON_MDOWN', this._onChildMouseDown); - this.dimensionsCache_ = null; + this.dimensionsCache_ = {}; } _getState = () => ({ From 1b255f60a495b7b48d8a2331f97f50cb929ee4e4 Mon Sep 17 00:00:00 2001 From: BenHodgson Date: Fri, 24 May 2024 12:48:18 +1000 Subject: [PATCH 3/3] move flushsync out of lifecycle method --- src/google_map.js | 6 ++++-- src/google_map_markers.js | 15 ++++++--------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/google_map.js b/src/google_map.js index db8133e9..307b1168 100644 --- a/src/google_map.js +++ b/src/google_map.js @@ -1,7 +1,7 @@ /* eslint-disable import/no-extraneous-dependencies, react/forbid-prop-types, react/no-find-dom-node, no-console, no-undef */ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import ReactDOM from 'react-dom'; +import ReactDOM, { flushSync } from 'react-dom'; // helpers import GoogleMapMap from './google_map_map'; @@ -706,7 +706,9 @@ class GoogleMap extends Component { this_._onChildMouseMove(); if (this_.markersDispatcher_) { - this_.markersDispatcher_.emit('kON_CHANGE'); + flushSync(() => { + this_.markersDispatcher_.emit('kON_CHANGE'); + }) if (this_.fireMouseEventOnIdle_) { this_.markersDispatcher_.emit('kON_MOUSE_POSITION_CHANGE'); } diff --git a/src/google_map_markers.js b/src/google_map_markers.js index 06224e96..b6727026 100644 --- a/src/google_map_markers.js +++ b/src/google_map_markers.js @@ -4,7 +4,6 @@ import PropTypes from 'prop-types'; // utils import omit from './utils/omit'; import shallowEqual from './utils/shallowEqual'; -import { flushSync } from 'react-dom'; const mainStyle = { width: '100%', @@ -110,14 +109,12 @@ export default class GoogleMapMarkers extends Component { const prevChildCount = (this.state.children || []).length; const state = this._getState(); - flushSync(() => { - this.setState( - state, - () => - (state.children || []).length !== prevChildCount && - this._onMouseChangeHandler() - ); - }); + this.setState( + state, + () => + (state.children || []).length !== prevChildCount && + this._onMouseChangeHandler() + ); }; _onChildClick = () => {