mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Only set dimensions if the window attributes change
Differential Revision: D19386339 fbshipit-source-id: b7f14c540ceec40cae0c4eb9fc93f2020a6ee16f
This commit is contained in:
committed by
Facebook Github Bot
parent
8219db9a4a
commit
35c6bb9ac0
@@ -15,19 +15,26 @@ import {type DisplayMetrics} from './NativeDeviceInfo';
|
||||
import {useEffect, useState} from 'react';
|
||||
|
||||
export default function useWindowDimensions(): DisplayMetrics {
|
||||
const [dims, setDims] = useState(() => Dimensions.get('window'));
|
||||
const [dimensions, setDimensions] = useState(() => Dimensions.get('window'));
|
||||
useEffect(() => {
|
||||
function handleChange({window}) {
|
||||
setDims(window);
|
||||
if (
|
||||
dimensions.width !== window.width ||
|
||||
dimensions.height !== window.height ||
|
||||
dimensions.scale !== window.scale ||
|
||||
dimensions.fontScale !== window.fontScale
|
||||
) {
|
||||
setDimensions(window);
|
||||
}
|
||||
}
|
||||
Dimensions.addEventListener('change', handleChange);
|
||||
// We might have missed an update between calling `get` in render and
|
||||
// `addEventListener` in this handler, so we set it here. If there was
|
||||
// no change, React will filter out this update as a no-op.
|
||||
setDims(Dimensions.get('window'));
|
||||
handleChange({window: Dimensions.get('window')});
|
||||
return () => {
|
||||
Dimensions.removeEventListener('change', handleChange);
|
||||
};
|
||||
}, []);
|
||||
return dims;
|
||||
}, [dimensions]);
|
||||
return dimensions;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user