【发布时间】:2020-08-24 12:36:00
【问题描述】:
我在我的 React Native 应用程序中使用了新的 React Navigation 5。
主菜单由RootNavigator 处理,即Drawer。登录/注册由AuthNavigation 处理,Stack。
成功登录后,我正尝试将用户发送到RootNavigator 下的Home 屏幕。换句话说,我试图通过发出navigation.navigate('RootNavigator', {screen: 'Home'}); 将用户发送到另一个导航器下的屏幕,但我收到一个错误消息:
有效载荷 {"name":"RootNavigator"} 的操作 'NAVIGATE' 不是 由任何导航器处理。
你有一个名为“RootNavigator”的屏幕吗?
这就是我的App.js 的样子:
const App = () => {
const [isLoading, setIsLoading] = useState(true);
const [isAuthenticatedUser, setIsAuthenticatedUser] = useState(false);
useEffect( () => {
// Check for valid auth_token here
// If we have valid token, isLoading is set to FALSE and isAuthenticatedUser is set to TRUE
});
return (
<Provider store={store}>
<PaperProvider>
<NavigationContainer>
{
isLoading
? <SplashScreen />
: isAuthenticatedUser ? <RootNavigator /> : <AuthNavigator />
}
</NavigationContainer>
</PaperProvider>
</Provider>
);
};
这是我的AuthNavigator,这是Stack:
import React from 'react';
import { createStackNavigator } from '@react-navigation/stack';
// Components
import Login from '../../login/Login';
const AuthStack = new createStackNavigator();
export const AuthNavigator = () => {
return(
<AuthStack.Navigator>
<AuthStack.Screen name="LoginScreen" component={Login} />
</AuthStack.Navigator>
);
};
这是RootNavigator,这是Drawer:
import React from 'react';
import { createDrawerNavigator } from '@react-navigation/drawer';
// Components
import Dashboard from '../../home/Dashboard';
import DrawerContent from './DrawerContent';
import ToDoList from '../../active_lists/to_do_lists/ToDoList';
const MainMenuDrawer = createDrawerNavigator();
export const RootNavigator = () => {
return (
<MainMenuDrawer.Navigator drawerContent={(navigation) => <DrawerContent navigation={navigation} />}>
<MainMenuDrawer.Screen name="Home" component={Dashboard} />
<MainMenuDrawer.Screen name="To Do List" component={ToDoList} />
</MainMenuDrawer.Navigator>
);
};
知道我在这里做错了什么吗?我想使用最干净的方法来处理这个问题。
【问题讨论】:
-
您是否尝试过从子组件调用 this.props.navigation.dispatch(DrawerActions.openDrawer()) ?我知道如果你想从一个嵌套导航器导航到另一个,你应该有一个父导航器(堆栈)。一定有一个大父母。
标签: react-native react-navigation react-navigation-stack react-navigation-drawer react-navigation-v5