web-dev-qa-db-ja.com

不変違反:このナビゲーターにはナビゲーションプロップがありません

私は私の反応ネイティブアプリを起動しようとしたときに私はこのメッセージを受信して​​います。通常この種のフォーマットは他のマルチスクリーンナビゲーションでも動作しますが、どういうわけかこのケースでは動作しません。

これがエラーです。

Invariant Violation: The navigation prop is missing for this navigator. In 
react-navigation 3 you must set up your app container directly. More info: 
https://reactnavigation.org/docs/en/app-containers.html

これが私のアプリのフォーマットです:

import React, {Component} from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { createStackNavigator } from 'react-navigation';

import Login from './view/login.js'
import SignUp from './view/signup.js'

const RootStack = createStackNavigator(
  {
    Home: {
      screen: Login
    },
    Signup: {
      screen: SignUp
    }
  },
  {
    initialRouteName: 'Home'
  }

);

export default class App extends React.Component {
  render() {
    return <RootStack />;
  }
}
70
Glenn Parale

React Navigation 3.0には、ルートナビゲータに必要な明示的なアプリケーションコンテナを含む 重大な変更点 がいくつかあります。

以前は、すべてのナビゲーターが「ナビゲーションコンテナー」に囲まれているため、アプリの最上位レベルでは、どのナビゲーターもナビゲーションコンテナーとして機能することができました。ナビゲーションコンテナは、現在はアプリケーションコンテナとして知られており、アプリケーションのナビゲーション状態を維持し、リンクイベントをナビゲーションアクションなどに変えるために外部との対話を処理する高次コンポーネントです。

バージョン2以前では、React Navigationのコンテナはcreate * Navigator関数によって自動的に提供されます。 v3以降、コンテナを直接使用する必要があります。 v3では、createNavigationContainerをcreateAppContainerに名前変更しました。

import {
  createStackNavigator,
  createAppContainer
} from 'react-navigation';
const MainNavigator = createStackNavigator({...});
const App = createAppContainer(MainNavigator);

より包括的なコード例:

import {
      createStackNavigator,
      createAppContainer
    } from 'react-navigation';
import Login from './view/login.js'
import SignUp from './view/signup.js'

const RootStack = createStackNavigator({
    Home: {
      screen: Login
    },
    Signup: {
      screen: SignUp
    }
  });

const App = createAppContainer(RootStack);

export default App;
120
Turnipdabeets

@Tom Dicksonはこんな感じです:

import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';

import ScreenOne from './ScreenOne';
import ScreenTwo from './ScreenTwo';

const NavStack = createStackNavigator({
    ScreenOne: { 
        screen: ScreenOne,
    },
    ScreenTwo: { 
        screen: ScreenTwo,
    },
});

const App = createAppContainer(NavStack);

export default App;

それからそれを参照してください

<App />
17
Damien Mason

これは別の方法です

import React, {Component} from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { createStackNavigator,createAppContainer } from 'react-navigation';

import Login from './view/login.js'
import SignUp from './view/signup.js'

const RootStack = createStackNavigator(
  {
    Home: {
      screen: Login
    },
    Signup: {
      screen: SignUp
    }
  },
  {
    initialRouteName: 'Home'
  }

);

class App extends React.Component {
  render() {
    return <RootStack />;
  }
}

export default createAppContainer(RootStack);
3
Sanjay
import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import Home from './home';
import Details from './details';

const Root = createStackNavigator({

    home: { 

        screen: Home,
    },

    details: { 

        screen: Details,
    },

});

const container = createAppContainer(Root);
export default container;   

app.jsファイルで</container>でそれを参照します。

2
Vivek

新しいファイルScreenContainer.jsを作成します(名前を選択できます)。それからScreenContainerファイルに以下を追加します。

import React, { Component } from 'react';
import { createStackNavigator, createAppContainer } from 'react-navigation';
import MainScreen from './MainScreen'; 
import AboutScreen from './AboutScreen';

const NavigationStack = createStackNavigator({
    Main: { 
        screen: MainScreen,
    },
    About: { 
        screen: AboutScreen,
    },
});

const Container = createAppContainer(NavigationStack);

export default Container; 

それからApp.jsファイルで:

import Container from './ScreenContainer';

class App extends Component {
  render() {
    return (
      <Container />
    );
  }
}
1
Labinot Bajrami
const AppNavigator = createStackNavigator({
  Home: { screen: Home },
  Friends: { screen: Friends },
});

私がやった

const App = createAppContainer(AppNavigator);
export default App;

代わりに

export default AppNavigator;
1
Ali Akram

一番下にコードがありました

export default class App extends React.Component {
  render() {
    return (
      <View >
        <SimpleApp style={{ width: Dimensions.get("window").width }} />
      </View>
    );
  }
}

私はそれを単に取り替えて、それは魅力のように働きました。もちろん、これは反応ナビゲーションライブラリの更新によるものです。

const App = createAppContainer(SimpleApp);
export default App;

また、私は createAppContainer libraryを上部の反応ナビゲーションにも含めました。

0
muhammad tayyab

過去数日から苦労していましたが、package.jsonからreact-navigationを削除し、npmを使用してインストールした場合は、バックアッププロジェクトを確認してナビゲーションバージョンを確認し、同じで、node-modulesを削除してnpm installを実行します。その作品を願っています。

React-Nativeで頭を壊す幸運:-)

0
Andy Rubin

これは、2つのタブを持つ下部ナビゲーターを作成することです。

import {createBottomTabNavigator, createAppContainer} from 'react-navigation';

export class Home extends Component{
   //...
}

export class Settings extends Component{
   //...
}     

const navig = createBottomTabNavigator({
  Home: Home,
  Settings: Settings
});

const App = createAppContainer(navig);

export default App;
0
AzizStark