繁体   English   中英

TypeError: undefined is not an object(评估'_reactNative.Stack.Navigator')

[英]TypeError: undefined is not an object (evaluating '_reactNative.Stack.Navigator')

import React, { Component } from 'react';
import { Text, View, TouchableOpacity, StyleSheet, Stack } from 'react-native';
import { createAppContainer, createSwitchNavigator } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; a
import { Ionicons, AntDesign } from '@react-navigation/native';

import { Icon } from 'react-native-elements'
import 'react-native-gesture-handler';
import Header from "./components/header.js"
import LoadingScreen from './screens/LoadingScreen';
import HomeScreen from './screens/HomeScreen';
import LoginScreen from './screens/LoginScreen';
import RegisterScreen from './screens/RegisterScreen';
import FirebaseKeys from './Config'

import MessageScreen from './screens/MessageScreen';
import ProfileScreen from './screens/ProfileScreen';
import PostScreen from './screens/PostScreen';
import NotificationScreen from './screens/NotificationScreen';

import * as firebase from 'firebase';

var firebaseConfig = FirebaseKeys
firebase.initializeApp(firebaseConfig);

export default function App() {

    if (this.isLoading) {
        return <LoadingScreen />;
    }

    return (
        <Stack.Navigator>
            {this.state.userToken == null ? (
                // No token found, user isn't signed in
                <>
                    <Stack.Screen name="Login" component={LoginScreen} options={{
                        title: 'Login',
                        // When logging out, a pop animation feels intuitive
                        // You can remove this if you want the default 'push' animation
                        animationTypeForReplace: this.state.isSignout ? 'pop' : 'push',
                    }}
                    />
                    <Stack.Screen name="SignUp" component={SignUpScreen} />
                </>
            ) : (
                    // User is signed in
                    <>
                        <Stack.Screen name="Home" component={HomeScreen} />
                        <Stack.Screen name="Post" component={PostScreen} />
                        <Stack.Screen name="Message" component={MessageScreen} />
                        <Stack.Screen name="Notification" component={NotificationScreen} />
                        <Stack.Screen name="Profile" component={ProfileScreen} />
                    </>
                )}
        </Stack.Navigator>
    );
}

我尝试了一切以查看代码是否有效,但我什至不了解错误任何解决方案? 我认为这是因为反应导航 4 或其他原因,但它有点令人困惑。 我也直接从文档中获得了所有这些信息,所以我看不出这里有什么问题。

首先,您需要将整个应用程序包装在

export default function App() {
  return (
    <NavigationContainer>{/* Rest of your app code */}</NavigationContainer>
  );
}

接下来您需要创建一个堆栈导航器组件

const Stack = createStackNavigator();

然后将屏幕添加到 Stack 并将其包含在 Navigation Container 中

   <NavigationContainer>
      <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Details" component={DetailsScreen} />
      </Stack.Navigator>
    </NavigationContainer>

您的代码应如下所示:

const AuthScreens = ()  => {
     <Stack.Navigator>
        <Stack.Screen name="Login" component={LoginScreen} options={{
           title: 'Login',
           animationTypeForReplace: this.state.isSignout ? 'pop' : 'push',
           }}
         />
        <Stack.Screen name="SignUp" component={SignUpScreen} />
     </Stack.Navigator>
}

const HomeScreens = ()  => {
     <Stack.Navigator initialRouteName="Home">
        <Stack.Screen name="Home" component={HomeScreen} />
        <Stack.Screen name="Post" component={PostScreen} />
        <Stack.Screen name="Message" component={MessageScreen} />
        <Stack.Screen name="Notification" component={NotificationScreen} />
        <Stack.Screen name="Profile" component={ProfileScreen} />
     </Stack.Navigator>
}

<NavigationContainer>
    {this.state.userToken == null ? AuthScreens : HomeScreens}
</NavigationContainer>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM