React Native 如何获取设备的方向

Jer*_*gle 1 javascript reactjs react-native

下面的当前代码将获取方向,但是如果设备处于横向视图并且您打开应用程序,它将显示纵向视图。手动旋转设备后,下面的代码可以正常工作如何在应用程序启动时获取设备的方向。#React #React Native

const ViewControllerProvider = (props) => {
  const [orientation, setOrientation] = useState('PORTRAIT');

  useEffect(() => {
    Dimensions.addEventListener('change', ({window: {width, height}}) => {
      if (width < height) {
        setOrientation('PORTRAIT');
      } else {
        setOrientation('LANDSCAPE');
      }
    });
  }, []);

  return (
    <ViewControllerContext.Provider value={{orientation}}>
      {props.children}
    </ViewControllerContext.Provider>
  );
};

export {ViewControllerProvider, ViewControllerContext};
Run Code Online (Sandbox Code Playgroud)

jn_*_*pdx 5

添加监听器时,您还可以手动调用来获取初始方向:

  const [orientation, setOrientation] = useState('LANDSCAPE');

  const determineAndSetOrientation = () => {
    let width = Dimensions.get('window').width;
    let height = Dimensions.get('window').height;

    if (width < height) {
        setOrientation('PORTRAIT');
      } else {
        setOrientation('LANDSCAPE');
      }
  }

  useEffect(() => {

    determineAndSetOrientation();
    Dimensions.addEventListener('change', determineAndSetOrientation);

    return () => {
      Dimensions.removeEventListener('change', determineAndSetOrientation)
    }
  }, []);
Run Code Online (Sandbox Code Playgroud)

删除事件侦听器也可能是个好主意(请参阅return声明)。