NativeStackExample.tsx 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import * as React from 'react';
  2. import { Text, View, Button } from 'react-native';
  3. import { NavigationContainer } from '@react-navigation/native';
  4. import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
  5. import { createNativeStackNavigator } from 'react-native-screens/native-stack';
  6. import type { StackScreenProps } from '@react-navigation/stack';
  7. type Routes = {
  8. Home: undefined;
  9. Details: undefined;
  10. Settings: undefined;
  11. };
  12. function HomeScreen({ navigation }: StackScreenProps<Routes, 'Home'>) {
  13. return (
  14. <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
  15. <Text>Home Screen</Text>
  16. <Button
  17. title="Go to Details"
  18. onPress={() => navigation.navigate('Details')}
  19. />
  20. </View>
  21. );
  22. }
  23. function SettingsScreen({ navigation }: StackScreenProps<Routes, 'Settings'>) {
  24. return (
  25. <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
  26. <Text>Settings Screen</Text>
  27. <Button
  28. title="Go to Details"
  29. onPress={() => navigation.navigate('Details')}
  30. />
  31. </View>
  32. );
  33. }
  34. const Tab = createBottomTabNavigator();
  35. function TabsScreen() {
  36. return (
  37. <Tab.Navigator>
  38. <Tab.Screen name="Home" component={HomeScreen} />
  39. <Tab.Screen name="Settings" component={SettingsScreen} />
  40. </Tab.Navigator>
  41. );
  42. }
  43. function DetailsScreen({ navigation }: StackScreenProps<Routes, 'Details'>) {
  44. return (
  45. <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
  46. <Text>Details Screen</Text>
  47. <Button
  48. title="Go to Details... again"
  49. onPress={() => navigation.push('Details')}
  50. />
  51. <Button title="Go to Home" onPress={() => navigation.navigate('Home')} />
  52. <Button title="Go back" onPress={() => navigation.goBack()} />
  53. </View>
  54. );
  55. }
  56. const Stack = createNativeStackNavigator();
  57. export default function NativeStackExample() {
  58. return (
  59. <NavigationContainer>
  60. <Stack.Navigator>
  61. <Stack.Screen name="Tabs" component={TabsScreen} />
  62. <Stack.Screen name="Details" component={DetailsScreen} />
  63. </Stack.Navigator>
  64. </NavigationContainer>
  65. );
  66. }