From 9aa000af8c93bcd69c400a11235781f972d79dd2 Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 1 Sep 2024 05:24:45 +0000 Subject: [PATCH] =?UTF-8?q?useStationList=E3=81=ABstationList=E3=82=92?= =?UTF-8?q?=E5=88=86=E9=9B=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.js | 2 ++ components/Apps.js | 4 ++-- stateBox/useStationList.tsx | 42 +++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 stateBox/useStationList.tsx diff --git a/App.js b/App.js index 66f6254..9f27d9c 100644 --- a/App.js +++ b/App.js @@ -16,6 +16,7 @@ import { SafeAreaProvider } from "react-native-safe-area-context"; import { DeviceOrientationChangeProvider } from "./stateBox/useDeviceOrientationChange"; import { TrainMenuProvider } from "./stateBox/useTrainMenu"; import { buildProvidersTree } from "./lib/providerTreeProvider"; +import { StationListProvider } from "./stateBox/useStationList"; LogBox.ignoreLogs([ "ViewPropTypes will be removed", @@ -32,6 +33,7 @@ export default function App() { useEffect(() => UpdateAsync(), []); const ProviderTree = buildProvidersTree([ + StationListProvider, FavoriteStationProvider, TrainDelayDataProvider, CurrentTrainProvider, diff --git a/components/Apps.js b/components/Apps.js index 1b33f12..06c96ea 100644 --- a/components/Apps.js +++ b/components/Apps.js @@ -24,6 +24,7 @@ import { EachTrainInfoCore } from "../components/ActionSheetComponents/EachTrain import { useNavigation } from "@react-navigation/native"; import { useTrainMenu } from "../stateBox/useTrainMenu"; import { AppsWebView } from "./Apps/WebView"; +import { useStationList } from "../stateBox/useStationList"; /* import StatusbarDetect from '../StatusbarDetect'; var Status = StatusbarDetect(); */ @@ -52,9 +53,8 @@ export default function Apps() { }); //駅情報画面用 - const [originalStationList, setOriginalStationList] = useState(); + const {originalStationList, setOriginalStationList} = useStationList(); const [trainMenu, setTrainMenu] = useState("true"); - useEffect(() => getStationList().then(setOriginalStationList), []); //地図表示テキスト const injectJavascript = injectJavascriptData( diff --git a/stateBox/useStationList.tsx b/stateBox/useStationList.tsx new file mode 100644 index 0000000..fc46c05 --- /dev/null +++ b/stateBox/useStationList.tsx @@ -0,0 +1,42 @@ +import React, { + createContext, + useContext, + useState, + useEffect, + useLayoutEffect, + FC, +} from "react"; +import { AS } from "../storageControl"; +import { getStationList } from "../lib/getStationList"; + +type initialStateType = { + originalStationList: any[]; + setOriginalStationList: React.Dispatch>; +}; +const initialState = { + originalStationList: [], + setOriginalStationList: () => {}, +}; + +const StationListContext = createContext(initialState); +type Props = { + children: React.ReactNode; +}; +export const useStationList = () => { + return useContext(StationListContext); +}; + +export const StationListProvider: FC = ({ children }) => { + const [originalStationList, setOriginalStationList] = useState(); + useEffect(() => { + getStationList().then(setOriginalStationList); + }, []); + + return ( + + {children} + + ); +};