diff --git a/package.json b/package.json index 720778cc..1cf2817b 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "eslint-plugin-import": "^2.7.0", "eslint-plugin-prettier": "^2.3.0", "eslint-plugin-react": "^7.3.0", - "flow-bin": "^0.57.1", "husky": "^0.14.3", "intersection-observer": "^0.4.2", "jest": "^21.0.1", diff --git a/src/List.js b/src/List.js index cfe084e3..d07f77df 100644 --- a/src/List.js +++ b/src/List.js @@ -49,9 +49,13 @@ export default class List extends React.PureComponent { } setRef = callback => { + let prevRootNode; this.setRootNode = node => { - const overflow = window.getComputedStyle(node)[AXIS_CSS_MAP[this.props.axis]]; - callback(['auto', 'scroll', 'overlay'].includes(overflow) ? node : null); + if (node !== prevRootNode) { + prevRootNode = node; + const overflow = window.getComputedStyle(node)[AXIS_CSS_MAP[this.props.axis]]; + callback(['auto', 'scroll', 'overlay'].indexOf(overflow) !== -1 ? node : null); + } }; }; diff --git a/src/__tests__/List.spec.js b/src/__tests__/List.spec.js index ef757464..e4e63e27 100644 --- a/src/__tests__/List.spec.js +++ b/src/__tests__/List.spec.js @@ -139,6 +139,12 @@ describe('setRootNode', () => { createTree({ currentLength: 20 }); expect(mockCallback).toBeCalledWith(null); }); + + test('having same root node prevents call getComputedStyle', () => { + const tree = createTree({ currentLength: 20 }); + tree.getInstance().setRootNode(target); + expect(window.getComputedStyle).toHaveBeenCalledTimes(1); + }); }); describe('handleUpdate', () => { diff --git a/yarn.lock b/yarn.lock index 21b87646..a57b5eae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31,9 +31,9 @@ dependencies: "@researchgate/eslint-config-rg-base" "^1.0.0" -"@researchgate/react-intersection-observer@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@researchgate/react-intersection-observer/-/react-intersection-observer-0.3.1.tgz#189e32c85d0b3a70e12d8408aa52e89da4e8bc85" +"@researchgate/react-intersection-observer@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@researchgate/react-intersection-observer/-/react-intersection-observer-0.4.0.tgz#703af3398ea327ba9633718582c528b95da70ef2" dependencies: invariant "^2.2.2" prop-types "^15.5.10" @@ -3247,10 +3247,6 @@ flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" -flow-bin@^0.56.0: - version "0.56.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.56.0.tgz#ce43092203a344ba9bf63c0cabe95d95145f6cad" - for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"