如何在DrawerNavigator(ReactNavigation v5)中使用StackNavigator?我在每个屏幕上都使用类

时间:2020-07-06 17:20:17

标签: react-native expo react-navigation react-navigation-v5 react-navigation-drawer

P.S:网络上的大多数Youtube视频或文章都未使用ReactNavigation v5,而是使用了较旧的版本。 当用户单击按钮可以导航到另一个屏幕(使用StackNavigator)和DrawerNavigator并在屏幕之间导航时,有人可以显示虚拟项目吗?屏幕必须有一个类和一个简单的文本,仅此而已。 谢谢!

1 个答案:

答案 0 :(得分:1)

您可以具有这样的基本设置,其中有“主页”,“个人资料”和“通知”屏幕。 主页和个人资料位于堆栈中,通知是一个单独的屏幕。堆栈和通知都放置在抽屉导航下。

在这里,我使用了类组件,这是您的要求,但首选功能组件,因为Navigation5提供了诸如useNavigation之类的钩子,但也有使用这些组件的变通办法。

您可以在下面看到代码。

import * as React from 'react';
import { Button, View, Text } from 'react-native';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';

class HomeScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Home Screen</Text>
        <Button
          onPress={() => this.props.navigation.navigate('Notifications')}
          title="Go to notifications"
        />

        <Button
          onPress={() => this.props.navigation.navigate('Profile')}
          title="Go to Profile"
        />
      </View>
    );
  }
}

class ProfileScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Profile Screen</Text>
        <Button
          onPress={() => this.props.navigation.navigate('Notifications')}
          title="Go to notifications"
        />
      </View>
    );
  }
}

class NotificationsScreen extends React.Component {
  render() {
    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Notifications Screen</Text>
        <Button
          onPress={() => this.props.navigation.goBack()}
          title="Go back home"
        />
      </View>
    );
  }
}

const Stack = createStackNavigator();
function HomeStack() {
  return (
    <Stack.Navigator>
      <Stack.Screen name="Home" component={HomeScreen} />
      <Stack.Screen name="Profile" component={ProfileScreen} />
    </Stack.Navigator>
  );
}

const Drawer = createDrawerNavigator();
export default class App extends React.Component {
  render() {
    return (
      <NavigationContainer>
        <Drawer.Navigator initialRouteName="Home">
          <Drawer.Screen name="Home" component={HomeStack} />
          <Drawer.Screen name="Notifications" component={NotificationsScreen} />
        </Drawer.Navigator>
      </NavigationContainer>
    );
  }
}

您也可以尝试以下小吃中的代码。 https://snack.expo.io/@guruparan/navsample