繁体   English   中英

在 React Native Expo 中为 App 组件创建 Wrapper

[英]Creating Wrapper for App Component in React Native Expo

我需要以某种方式从 App.js 访问我的 Redux 商店,从文档中它说我可以为我的应用程序创建新的入口点,所以我确实创建了一个但不知何故我的应用程序仍然无法访问 Redux 商店。

Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>

这是我的App.js代码

 import React, { useState, useEffect } from "react"; import { NavigationContainer } from "@react-navigation/native"; import { createStackNavigator } from "@react-navigation/stack"; import { useFonts } from "expo-font"; import AppLoading from "expo-app-loading"; import { Provider } from "react-redux"; import { useDispatch, useSelector } from "react-redux"; //Layout import Auth from "./src/layout/Auth.layout"; import Register from "./src/layout/Register.layout"; import Drawer from "./src/navigation/Drawer"; export default function App() { const Stack = createStackNavigator(); const { isLoggedIn } = useSelector((state) => state.user); const [isLoading, setIsLoading] = useState(false); let [fontsLoaded] = useFonts({ DMSans: require("./assets/fonts/DMSans-Regular.ttf"), "DMSans-Medium": require("./assets/fonts/DMSans-Medium.ttf"), "DMSans-Bold": require("./assets/fonts/DMSans-Bold.ttf"), }); if (!fontsLoaded || isLoading) { return <AppLoading />; } else { return ( <NavigationContainer> {!isLoggedIn ? ( <Stack.Navigator initialRouteName="Auth" screenOptions={{ headerShown: false }} > <Stack.Screen name="Auth" component={Auth} /> <Stack.Screen name="Register" component={Register} /> </Stack.Navigator> ) : ( <Drawer /> )} </NavigationContainer> ); } }

这是我创建的EntryPoint.js

 import { registerRootComponent } from "expo"; import App from "../App"; import React from "react"; import { store, persistor } from "./state/store"; import { PersistGate } from "redux-persist/es/integration/react"; import { Provider } from "react-redux"; export default function EntryPoint() { return ( <Provider store={store}> <PersistGate persistor={persistor}> <App /> </PersistGate> </Provider> ); } registerRootComponent(EntryPoint);

我在这里错过了什么? 或者我可以实施更好的解决方案?

解决了,我最终删除了 EntryPoint.js 并在我的 App.js 中创建了一个包装器。

App.js代码:

 import React, { useState, useEffect } from "react"; import { NavigationContainer } from "@react-navigation/native"; import { createStackNavigator } from "@react-navigation/stack"; import { useFonts } from "expo-font"; import AppLoading from "expo-app-loading"; import { Provider } from "react-redux"; //Layout import Auth from "./src/layout/Auth.layout"; import Register from "./src/layout/Register.layout"; import Drawer from "./src/navigation/Drawer"; import { store, persistor } from "./src/state/store"; import { PersistGate } from "redux-persist/es/integration/react"; import { useSelector } from "react-redux"; const AppWrapper = () => { const Stack = createStackNavigator(); const { isLoggedIn } = useSelector((state) => state.user); const [isLoading, setIsLoading] = useState(false); let [fontsLoaded] = useFonts({ DMSans: require("./assets/fonts/DMSans-Regular.ttf"), "DMSans-Medium": require("./assets/fonts/DMSans-Medium.ttf"), "DMSans-Bold": require("./assets/fonts/DMSans-Bold.ttf"), }); if (!fontsLoaded || isLoading) { return <AppLoading />; } else { return ( <NavigationContainer> {!isLoggedIn ? ( <Stack.Navigator initialRouteName="Auth" screenOptions={{ headerShown: false }} > <Stack.Screen name="Auth" component={Auth} /> <Stack.Screen name="Register" component={Register} /> </Stack.Navigator> ) : ( <Drawer /> )} </NavigationContainer> ); } }; export default function App() { return ( <Provider store={store}> <PersistGate persistor={persistor}> <AppWrapper /> </PersistGate> </Provider> ); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM