Topのルーティング関係を最適化

This commit is contained in:
harukin-expo-dev-env 2024-03-19 09:38:20 +00:00
parent 720b627011
commit b6e24e08cb
5 changed files with 33 additions and 61 deletions

View File

@ -23,14 +23,16 @@ import { useDeviceOrientationChange } from "./stateBox/useDeviceOrientationChang
import { SheetManager } from "react-native-actions-sheet"; import { SheetManager } from "react-native-actions-sheet";
import TrainMenu from "./components/trainMenu"; import TrainMenu from "./components/trainMenu";
import { EachTrainInfoCore } from "./components/ActionSheetComponents/EachTrainInfoCore"; import { EachTrainInfoCore } from "./components/ActionSheetComponents/EachTrainInfoCore";
import { useNavigation } from "@react-navigation/native";
/* /*
import StatusbarDetect from './StatusbarDetect'; import StatusbarDetect from './StatusbarDetect';
var Status = StatusbarDetect(); */ var Status = StatusbarDetect(); */
export default function Apps({ navigation, webview, stationData }) { export default function Apps({ stationData }) {
const { currentTrain } = useCurrentTrain(); const { webview, currentTrain } = useCurrentTrain();
const { height, width } = useWindowDimensions(); const { height, width } = useWindowDimensions();
const { navigate } = navigation; const { navigate } = useNavigation();
var urlcache = ""; var urlcache = "";
const { favoriteStation } = useFavoriteStation(); const { favoriteStation } = useFavoriteStation();
const { isLandscape, setIsLandscape } = useDeviceOrientationChange(); const { isLandscape, setIsLandscape } = useDeviceOrientationChange();

61
Top.js
View File

@ -10,14 +10,9 @@ import HowTo from "./howto";
import News from "./components/news.js"; import News from "./components/news.js";
import TrainMenu from "./components/trainMenu.js"; import TrainMenu from "./components/trainMenu.js";
import FavoriteList from "./components/FavoriteList.js"; import FavoriteList from "./components/FavoriteList.js";
import { useFavoriteStation } from "./stateBox/useFavoriteStation";
import { optionData } from "./lib/stackOption.js"; import { optionData } from "./lib/stackOption.js";
import { useCurrentTrain } from "./stateBox/useCurrentTrain.js";
const Stack = createStackNavigator(); const Stack = createStackNavigator();
export const Top = ({ navigation }) => { export const Top = ({ navigation }) => {
const { favoriteStation, setFavoriteStation } = useFavoriteStation();
const { webview, getCurrentTrain } = useCurrentTrain();
//地図用 //地図用
const [mapsStationData, setMapsStationData] = useState(undefined); const [mapsStationData, setMapsStationData] = useState(undefined);
@ -42,16 +37,8 @@ export const Top = ({ navigation }) => {
gestureEnabled: true, gestureEnabled: true,
headerTransparent: true, headerTransparent: true,
}} }}
> children={() => <Apps stationData={mapsStationData} />}
{(props) => ( />
<Apps
{...props}
webview={webview}
stationData={mapsStationData}
getCurrentTrain={getCurrentTrain}
/>
)}
</Stack.Screen>
<Stack.Screen <Stack.Screen
name="trainbase" name="trainbase"
options={{ options={{
@ -59,41 +46,23 @@ export const Top = ({ navigation }) => {
gestureEnabled: true, gestureEnabled: true,
...TransitionPresets.SlideFromRightIOS, ...TransitionPresets.SlideFromRightIOS,
}} }}
> component={TrainBase}
{(props) => <TrainBase {...props} />} />
</Stack.Screen>
<Stack.Screen name="howto" options={optionData} component={HowTo} />
<Stack.Screen name="news" options={optionData} component={News} />
<Stack.Screen <Stack.Screen
name="howto" name="trainMenu"
options={{ options={optionData}
...optionData, children={() => <TrainMenu stationData={mapsStationData} />}
}} />
>
{(props) => <HowTo {...props} />}
</Stack.Screen>
<Stack.Screen name="news" options={optionData}>
{(props) => <News {...props} />}
</Stack.Screen>
<Stack.Screen name="trainMenu" options={optionData}>
{(props) => (
<TrainMenu
{...props}
webview={webview}
stationData={mapsStationData}
/>
)}
</Stack.Screen>
<Stack.Screen <Stack.Screen
name="favoriteList" name="favoriteList"
options={{ ...optionData, gestureEnabled: false }} options={{ ...optionData, gestureEnabled: false }}
> children={() => <FavoriteList stationData={mapsStationData} />}
{(props) => ( />
<FavoriteList
{...props}
webview={webview}
stationData={mapsStationData}
/>
)}
</Stack.Screen>
</Stack.Navigator> </Stack.Navigator>
); );
}; };

View File

@ -3,9 +3,12 @@ import { View, Text, TouchableOpacity, ScrollView } from "react-native";
import { ListItem } from "native-base"; import { ListItem } from "native-base";
import Icon from "react-native-vector-icons/Entypo"; import Icon from "react-native-vector-icons/Entypo";
import { useFavoriteStation } from "../stateBox/useFavoriteStation"; import { useFavoriteStation } from "../stateBox/useFavoriteStation";
export default function FavoriteList({ navigation, webview, stationData }) { import { useCurrentTrain } from "../stateBox/useCurrentTrain";
const { navigate } = navigation; import { useNavigation } from "@react-navigation/native";
export default function FavoriteList({ stationData }) {
const { favoriteStation } = useFavoriteStation(); const { favoriteStation } = useFavoriteStation();
const { webview } = useCurrentTrain();
const { navigate } = useNavigation();
return ( return (
<View style={{ height: "100%", backgroundColor: "#0099CC" }}> <View style={{ height: "100%", backgroundColor: "#0099CC" }}>

View File

@ -4,11 +4,10 @@ import { WebView } from "react-native-webview";
import StatusbarDetect from "../StatusbarDetect"; import StatusbarDetect from "../StatusbarDetect";
import { AS } from "../storageControl"; import { AS } from "../storageControl";
import { news } from "../config/newsUpdate"; import { news } from "../config/newsUpdate";
import { useNavigation } from "@react-navigation/native";
var Status = StatusbarDetect(); var Status = StatusbarDetect();
export default function News(props) { export default function News() {
const { const { navigate } = useNavigation();
navigation: { navigate },
} = props;
return ( return (
<View style={{ height: "100%", backgroundColor: "#0099CC" }}> <View style={{ height: "100%", backgroundColor: "#0099CC" }}>
<WebView <WebView

View File

@ -2,13 +2,12 @@ import React, { useRef } from "react";
import { View, Text, TouchableOpacity, Linking } from "react-native"; import { View, Text, TouchableOpacity, Linking } from "react-native";
import MapView, { Marker } from "react-native-maps"; import MapView, { Marker } from "react-native-maps";
import { MaterialCommunityIcons } from "@expo/vector-icons"; import { MaterialCommunityIcons } from "@expo/vector-icons";
export default function TrainMenu({ import { useCurrentTrain } from "../stateBox/useCurrentTrain";
navigation: { navigate }, import { useNavigation } from "@react-navigation/native";
webview, export default function TrainMenu({ stationData, style }) {
stationData, const { webview } = useCurrentTrain();
style,
}) {
const mapRef = useRef(); const mapRef = useRef();
const { navigate } = useNavigation();
return ( return (
<View style={{ height: "100%", backgroundColor: "#0099CC", ...style }}> <View style={{ height: "100%", backgroundColor: "#0099CC", ...style }}>
<MapView <MapView