我在try 运行React-Native应用程序时遇到这个错误.我正在try 制作一个具有BottomNavBar和抽屉导航的React-Native应用程序.我正在使用Redux-Tools进行状态管理.我遵循了该文档并得到了这个错误.

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

This error is located at:
    in App (at withDevTools.js:18)
    in withDevTools(App) (at renderApplication.js:57)
    in RCTView (at View.js:116)
    in View (at AppContainer.js:127)
    in RCTView (at View.js:116)
    in View (at AppContainer.js:155)
    in AppContainer (at renderApplication.js:50)
    in main(RootComponent) (at renderApplication.js:67), js engine: hermes

App.js

import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { Provider, useDispatch, useSelector } from 'react-redux'; // Import Provider
import store from './store/store'; // Assuming your store is here
import { logout } from './store/authSlice'; // Assuming your logout action is here
import * as SecureStore from 'expo-secure-store';
import { Ionicons } from '@expo/vector-icons';

// Import your screen components (replace with your actual screens)
import HomeScreen from './screens/HomeScreen';
import SettingsScreen from './screens/SettingsScreen';
import ProfileScreen from './screens/ProfileScreen';
import FaqScreen from './screens/FaqScreen';
import LoginScreen from './screens/LoginScreen';
import LogoutScreen from './screens/LogoutScreen';
// ... (add other screens as needed)

const Tab = createBottomTabNavigator();
const Drawer = createDrawerNavigator();

const HomeIcon = ({ size, color }) => <Ionicons name="home-outline" size={size} color={color} />;
const ProfileIcon = ({ size, color }) => <Ionicons name="person-outline" size={size} color={color} />;
const SettingsIcon = ({ size, color }) => <Ionicons name="settings-outline" size={size} color={color} />;
const LoginIcon = ({ size, color }) => <Ionicons name="log-in-outline" size={size} color={color} />;

function MyTabs({ isLoggedIn }) {
  return (
    <Tab.Navigator screenOptions={{headerShown: false}} initialRouteName="Home">
      <Tab.Screen
        name="Home"
        component={HomeScreen}
        options={{
          tabBarIcon: ({ color, size }) => <HomeIcon size={size} color={color} />,
        }}
      />
      <Tab.Screen
        name="Settings"
        component={SettingsScreen}
        options={{
          tabBarIcon: ({ color, size }) => <SettingsIcon size={size} color={color} />,
        }}
      />
      {isLoggedIn ? (
        <Tab.Screen
          name="Profile"
          component={ProfileScreen}
          options={{
            tabBarIcon: ({ color, size }) => <ProfileIcon size={size} color={color} />,
          }}
        />
      ) : (
        <Tab.Screen
          name="Login"
          component={LoginScreen}
          options={{
            tabBarIcon: ({ color, size }) => <LoginIcon size={size} color={color} />,
          }}
        />
      )}
      
    </Tab.Navigator>
  );
}

function App() {
    const isLoggedIn = useSelector((state) => state.auth.isLoggedIn);
  return (
    <Provider store={store}>
      <NavigationContainer initialRouteName="Home">
        <Drawer.Navigator>
          <Drawer.Screen name="Shop" component={MyTabs} />
          <Drawer.Screen name="FAQ" component={FaqScreen} />
          {isLoggedIn ? <Drawer.Screen name="Logout" component={LogoutScreen} /> : null}
          {/* Add other drawer screens if needed */}
        </Drawer.Navigator>
      </NavigationContainer>
    </Provider>
  );
}

export default App;

推荐答案

App组件正在渲染Redux Provider,因此本身无法访问任何Redux上下文,因为没有从ReactTree的更高层向它提供任何上下文.它不能使用useSelector挂钩.

更新代码,使AppProvider组件包装,以便它可以访问提供的Redux上下文.

示例:

function App() {
  const isLoggedIn = useSelector((state) => state.auth.isLoggedIn);

  return (
    <NavigationContainer initialRouteName="Home">
      <Drawer.Navigator>
        <Drawer.Screen name="Shop" component={MyTabs} />
        <Drawer.Screen name="FAQ" component={FaqScreen} />
        {isLoggedIn ? <Drawer.Screen name="Logout" component={LogoutScreen} /> : null}
        {/* Add other drawer screens if needed */}
      </Drawer.Navigator>
    </NavigationContainer>
  );
}

const AppProvider = () => (
  <Provider store={store}>
    <App />
  </Provider>
);

export default AppProvider;

Javascript相关问答推荐

如何在Node.js中减go 两个日期和时间?

如何使图像逐渐/平稳地响应(先减少宽度,然后减少高度)

JavaScript替换子 node 导致它们更改为[对象HTMLTable SectionElement]

Regex可以 Select 以任何顺序匹配组

Python类实现的JavaScript吊坠是什么样子的?

使用ReactJS对Ant Design表中的空值进行排序

鼠标移动时更新画布

Fastify错误:CORS策略已阻止从起源api-dev.example.com上的MLhttp请求

Express.js:使用Passport.js实现基于角色的身份验证时出现太多重定向问题

JavaScript文本区域阻止KeyDown/KeyUp事件本身上的Alt GR +键组合

Next.js Next/Image图像隐含性有任何类型-如何修复?

将2D数组转换为图形

WebGL 2.0无符号整数输入变量

如何调用名称在字符串中的实例方法?

查找最长的子序列-无法重置数组

为什么我的导航条打开状态没有在窗口addeventlistener(Reaction Js)中更新?

如何将数据块添加到d3力有向图中?

使用getBorbingClientRect()更改绝对元素位置

为什么我不能使用其同级元素调用和更新子元素?

无法使用npm install安装react-dom、react和next