React Navigation v3 でのナビゲーションの基本例
React Navigation v3における「Invariant Violation: The navigation prop is missing for this navigator」エラーの解決方法
原因
このエラーが発生する主な原因は以下の2つです。
- createAppContainer関数を使用していない: React Navigation v3では、
createAppContainer
関数を使用して、ナビゲーションコンポーネントの階層をラッピングする必要があります。この関数は、navigation
propを各コンポーネントに提供します。 - ナビゲーションコンポーネントに誤ったpropをを渡している: 一部のナビゲーションコンポーネントは、
navigation
propではなく、screenProps
やroute
などの別のpropを必要とします。
解決方法
以下の手順でエラーを解決できます。
createAppContainer関数を使用する
まだ createAppContainer
関数を使用していない場合は、アプリケーションのルートコンポーネントで以下のように使用します。
import { createAppContainer } from 'react-navigation';
import { MyNavigator } from './MyNavigator'; // ナビゲーションコンポーネントをインポート
const App = createAppContainer(MyNavigator);
export default App;
正しいpropをナビゲーションコンポーネントに渡す
使用しているナビゲーションコンポーネントに必要なpropを確認してください。例えば、StackNavigator
コンポーネントを使用している場合は、navigation
propを各スクリーンコンポーネントに渡す必要があります。
import { StackNavigator } from 'react-navigation';
const MyNavigator = StackNavigator({
Home: { screen: HomeScreen },
Details: { screen: DetailsScreen },
});
export default MyNavigator;
上記の方法で解決しない場合は、以下の点も確認してみてください。
- 使用している React Navigation のバージョンが最新であることを確認してください。
- このエラーは、開発環境でのみ発生します。本番環境では発生しません。
React Navigation v3 でのナビゲーションの基本例
必要なもの
- React Navigation v3
- React Native
- React
手順
- プロジェクトを作成する
npx create-react-native-app my-app
- 必要なライブラリをインストールする
yarn add react-navigation
App.js
ファイルを編集する
import React from 'react';
import { createBottomTabNavigator } from 'react-navigation';
import { StyleSheet, Text, View } from 'react-native';
const HomeScreen = ({ navigation }) => (
<View style={styles.container}>
<Text>Home Screen</Text>
<Button title="Go to Details" onPress={() => navigation.navigate('Details')} />
</View>
);
const DetailsScreen = ({ navigation }) => (
<View style={styles.container}>
<Text>Details Screen</Text>
<Button title="Go back" onPress={() => navigation.goBack()} />
</View>
);
const TabNavigator = createBottomTabNavigator({
Home: { screen: HomeScreen },
Details: { screen: DetailsScreen },
});
const App = () => (
<TabNavigator />
);
export default App;
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
});
- アプリを実行する
yarn start
React Navigation v3は、ネイティブモジュールの最新バージョンを使用することを想定しています。古いバージョンのネイティブモジュールを使用している場合は、エラーが発生する可能性があります。
使用しているネイティブモジュールのバージョンを確認するには、以下のコマンドを実行します。
npm ls react-navigation react-native
古いバージョンのネイティブモジュールを使用している場合は、最新バージョンに更新してください。
キャッシュをクリアする
React Native キャッシュが破損している場合も、このエラーが発生する可能性があります。キャッシュをクリアするには、以下のコマンドを実行します。
react-native clear-cache
アプリを再起動する
単純な解決策ですが、アプリを再起動すると問題が解決する場合があります。
デバイスを再起動する
デバイスの再起動により、一時的な問題が解決される場合があります。
reactjs react-native