Рерайт кода: Навигация между экранами в React Native с React Navigation

    Исходный код содержит дублирование компонента NavigationContainer и неправильную структуру приложения. Ниже представлен исправленный и оптимизированный вариант.

    Основные изменения

    • Удален дублирующийся NavigationContainer из App.js
    • Исправлена структура компонентов для корректной работы навигации
    • Улучшена читаемость кода и именование файлов

    Исправленный код

    App.js - точка входа приложения, содержит NavigationContainer:

    import { StatusBar } from 'expo-status-bar';
    import { StyleSheet, View, Text } from 'react-native';
    import AppNavigator from './AppNavigator';
    import { NavigationContainer } from '@react-navigation/native';
    
    export default function App() {
      return (
        <NavigationContainer>
          <View style={styles.container}>
            <Text>Welcome</Text>
            <AppNavigator />
            <StatusBar style="auto" />
          </View>
        </NavigationContainer>
      );
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: '#fff',
        alignItems: 'center',
        justifyContent: 'center',
      },
    });

    AppNavigator.js - стек навигации без NavigationContainer:

    import React from "react";
    import { createNativeStackNavigator } from "@react-navigation/native-stack";
    import Main from "./components/Main";
    import Authentication from "./components/Authentication";
    
    const Stack = createNativeStackNavigator();
    
    export default function AppNavigator() {
      return (
        <Stack.Navigator>
          <Stack.Screen
            name="Main"
            component={Main}
            options={{ title: 'Home' }}
          />
          <Stack.Screen
            name="Authentication"
            component={Authentication}
            options={{ title: 'Login' }}
          />
        </Stack.Navigator>
      );
    }

    Main.js - экран с кнопкой перехода:

    import React from "react";
    import { StyleSheet, Text, View, Button } from 'react-native';
    
    export default function Main({ navigation }) {
      const loadScene = () => {
        navigation.navigate('Authentication');
      };
    
      return (
        <View style={styles.container}>
          <Text>Main Screen</Text>
          <Button title='Go to Login' onPress={loadScene} />
        </View>
      );
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: '#fff',
        alignItems: 'center',
        justifyContent: 'center',
      },
    });

    После этих исправлений навигация должна работать корректно, ошибок не возникнет.