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