refactor(RunnerModal): 替换窗口尺寸获取逻辑以精简代码
移除原有的window尺寸状态和手动监听的订阅逻辑,改用useWindowDimensions hook获取窗口尺寸,减少冗余代码
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import React, { useCallback, useEffect, useMemo } from 'react';
|
||||
import {
|
||||
Alert,
|
||||
Dimensions,
|
||||
Modal,
|
||||
ScaledSize,
|
||||
StyleSheet,
|
||||
Text,
|
||||
TouchableOpacity,
|
||||
useWindowDimensions,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import { useKeepAwake } from 'expo-keep-awake';
|
||||
@@ -33,22 +32,9 @@ export const RunnerModal: React.FC<RunnerModalProps> = ({ runner, onClose }) =>
|
||||
// 保持屏幕常亮
|
||||
useKeepAwake();
|
||||
|
||||
const [windowSize, setWindowSize] = useState<ScaledSize>(() => Dimensions.get('window'));
|
||||
useEffect(() => {
|
||||
const listener = ({ window }: { window: ScaledSize }) => setWindowSize(window);
|
||||
const subscription = Dimensions.addEventListener('change', listener);
|
||||
return () => {
|
||||
if (subscription && typeof subscription.remove === 'function') {
|
||||
subscription.remove();
|
||||
} else {
|
||||
try {
|
||||
Dimensions.removeEventListener('change', listener);
|
||||
} catch (e) { /* noop */ }
|
||||
}
|
||||
};
|
||||
}, []);
|
||||
const isLandscape = useMemo(() => windowSize.width > windowSize.height, [windowSize]);
|
||||
const isWide = windowSize.width >= 900;
|
||||
const { width: windowWidth, height: windowHeight } = useWindowDimensions();
|
||||
const isLandscape = useMemo(() => windowWidth > windowHeight, [windowWidth, windowHeight]);
|
||||
const isWide = windowWidth >= 900;
|
||||
const splitMode = isLandscape || isWide;
|
||||
|
||||
// 进入后台时保存状态
|
||||
|
||||
Reference in New Issue
Block a user