From b277a3c91fe1794c18d7a78bf87c3785d69544a6 Mon Sep 17 00:00:00 2001 From: SleepWalker Date: Sun, 19 Nov 2017 20:32:52 +0200 Subject: [PATCH] #366: ensure the height will be merged immediately after first mount of MeasureHeight --- src/components/MeasureHeight.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/components/MeasureHeight.js b/src/components/MeasureHeight.js index 44a5212..369560d 100644 --- a/src/components/MeasureHeight.js +++ b/src/components/MeasureHeight.js @@ -36,18 +36,19 @@ export default class MeasureHeight extends PureComponent<{ el: ?HTMLDivElement; componentDidMount() { + // we want to measure height immediately on first mount to avoid ui laggs this.measure(); - window.addEventListener('resize', this.measure); + window.addEventListener('resize', this.enqueueMeasurement); } componentDidUpdate(prevProps: typeof MeasureHeight.prototype.props) { if (this.props.shouldMeasure(prevProps.state, this.props.state)) { - this.measure(); + this.enqueueMeasurement(); } } componentWillUnmount() { - window.removeEventListener('resize', this.measure); + window.removeEventListener('resize', this.enqueueMeasurement); } render() { @@ -60,7 +61,9 @@ export default class MeasureHeight extends PureComponent<{ return
this.el = el} />; } - measure = debounce(() => { - requestAnimationFrame(() => this.el && this.props.onMeasure(this.el.offsetHeight)); - }); + measure = () => { + requestAnimationFrame(() => {this.el && this.props.onMeasure(this.el.offsetHeight);}); + }; + + enqueueMeasurement = debounce(this.measure); }