React native 不变违例:";“主要”;在运行react本机应用程序时未注册

React native 不变违例:";“主要”;在运行react本机应用程序时未注册,react-native,expo,React Native,Expo,这是我的文件夹结构。我已经用expo启动了这个应用程序。由于以下错误,我无法运行它。 Rootstack.js import React from 'react'; import { createSwitchNavigator } from 'react-navigation'; import { createStackNavigator } from 'react-navigation-stack'; import LoginComponent from "../compone

这是我的文件夹结构。我已经用expo启动了这个应用程序。由于以下错误,我无法运行它。

Rootstack.js

import React from 'react';
import { createSwitchNavigator } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';


import LoginComponent from "../component/login/login";
import HomeComponent from "../component/home/home"

const AuthNav = createStackNavigator({
    Login:{
        screen : LoginComponent,
        navigationOptions:{
            headerShown: false
        }
    },
});

const AppNav = createStackNavigator({
    Home:{
        screen : HomeComponent,
        tabBarLabel: 'Home',
        navigationOptions:{
            headerShown: false
        }
    },
   
});

const switchNav = createSwitchNavigator({
    AuthNav,
    AppNav
},{
    initialRouteName:"AuthNav"
});


export default switchNav;
App.js内部堆栈文件夹

import { createAppContainer } from 'react-navigation'
import App from './stack/RootStack'
import { AppRegistry } from 'react-native';
AppRegistry.registerComponent('main',() => App);

export default createAppContainer(App);

main app.js

import App from './src/App.js';
export default App;
import App from './src/App.js';
// Use it here
import { AppRegistry } from 'react-native';
AppRegistry.registerComponent('main',() => App);
export default App;
错误

错误2

Invariant Violation: "main" has not been registered. This can happen if:
* Metro (the local dev server) is run from the wrong folder. Check if Metro is running, stop it and restart it in the current project.
* A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called.

这是我做错的地方。

这个问题很可能与多次注册你的应用程序有关

  • 将所有导航逻辑保留在RootStack.js中,并避免在app.js中使用
    createAppContainer()

  • AppRegistry.registerComponent('main',()=>App)
    应该是配置导航后的最终声明

  • 将App.js导入main App.js意味着您要注册两次主组件(您应该只有一个输出文件)。React使用
    index.js
    作为默认输出

  • 在堆栈文件夹中使用此App.js:

    import { createAppContainer } from 'react-navigation'
    import App from './stack/RootStack'
    
    //Remove these 2 lines below
    import { AppRegistry } from 'react-native';
    AppRegistry.registerComponent('main',() => App);
    
    export default createAppContainer(App);
    
    在主app.js中

    import App from './src/App.js';
    export default App;
    
    import App from './src/App.js';
    // Use it here
    import { AppRegistry } from 'react-native';
    AppRegistry.registerComponent('main',() => App);
    export default App;
    

    您在这里看到的有意义的例外是:

    不变冲突:尝试注册两个具有相同名称RNCSAFearApprovider的视图

    “main”尚未注册
    是一种误导,它的发生只是因为另一个错误


    发生
    RNCSafeAreaProvider
    异常,因为您的应用程序中有多个
    react native safe area context
    副本。除了将其安装在应用程序中之外,您可能还使用了一个包含它作为依赖项的库。如果使用Thread,可以运行
    Thread why react native safe area context
    ,查看它的来源。尝试运行
    expo install react native safe area context
    ,如果没有帮助,您可以使用纱线分辨率覆盖依赖它的软件包使用的版本。

    非常感谢。为我工作