react-navigation6.xルーティングライブラリの基本的な使い方の詳しい説明

react-navigation6.xルーティングライブラリの基本的な使い方の詳しい説明

react-nativeプロジェクトの初期化

cmd を開き、rn プロジェクトを作成するフォルダーに移動します。

npx 反応ネイティブ 初期化テストRN

ここではプロジェクト名が testRN に設定されていますが、自分で設定することもできます。

react-nativeプロジェクトをインストールする

Android 仮想マシンまたは USB デバッグ実機を接続し、作成されたプロジェクトのルート ディレクトリに cd し、yarn android をインストールして起動します。

糸アンドロイド

初期インストールが完了した後、携帯電話が切断されていない場合は、仮想マシンまたは携帯電話でプロジェクトアプリを入力するだけで、プロジェクトのルートディレクトリでPCを起動してyarn startを実行し、再度インストールする必要はありません。切断後に再インストールする必要がある場合があります。

糸の始まり

起動後、cmd インターフェイスで r を押して更新します。

react-navigation ルーティングライブラリのインストール

コンテンツは Android テストに基づいて構築されており、iOS はテストしていません。

以下のパッケージを一度にインストールします。

糸を追加 @react-navigation/native react-native-screens react-native-safe-area-context @react-navigation/native-stack

Android の追加構成については、 testRN\android\app\src\main\java\com\testrnの MainActivity.java ファイルを変更します。

ここに画像の説明を挿入

コード:

  android.os.Bundle をインポートします。

  @オーバーライド
  保護されたvoid onCreate(バンドルsavedInstanceState) {
    super.onCreate(null);
  }

ルーティングライブラリの使用

app.jsを次のコードに変更します。

'react' から * を React としてインポートします。
'react-native' から { View, Text } をインポートします。
'@react-navigation/native' から {NavigationContainer} をインポートします。
'@react-navigation/native-stack' から createNativeStackNavigator をインポートします。

関数ホームスクリーン() {
  戻る (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>ホーム画面</Text>
    </表示>
  );
}

スタックを初期化します。

関数App() {
  戻る (
    // NavigationContainer はルートのコンテナであり、関連するすべてのコンテンツをそこに置く <NavigationContainer>
      <スタック.ナビゲーター>
        * Stack.Screen はルーティングされたウィンドウであり、name はジャンプ先のウィンドウ名を設定し、ウィンドウのコンポーネント コンテンツはコンポーネント * に配置されます。
        <Stack.Screen name="Home" コンポーネント={HomeScreen} />
      </Stack.Navigator>
    </ナビゲーションコンテナ>
  );
}

デフォルトのアプリをエクスポートします。

ここに画像の説明を挿入

ルートジャンプとルートパラメータの送信

'react' から * を React としてインポートします。

// ボタンを追加
'react-native' から { Button、View、Text } をインポートします。
'@react-navigation/native' から {NavigationContainer} をインポートします。
'@react-navigation/native-stack' から createNativeStackNavigator をインポートします。
                    
                // ナビゲーションパラメータを追加する function HomeScreen({navigation}) {
  戻る (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>ホーム画面</Text>
      ジャンプボタンを追加 */
      <ボタン
        title="詳細へ移動"   
        // navigation.navigate('Details') はジャンプに使用され、Details は対応するウィンドウ名を指します
        onPress={() => navigation.navigate('詳細')}
      />
    </表示>
  );
}

関数の詳細画面() {
  戻る (
    <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
      <Text>詳細画面</Text>
    </表示>
  );
}

スタックを初期化します。

関数App() {
  戻る (
    // NavigationContainer はルートのコンテナであり、関連するすべてのコンテンツをそこに置く <NavigationContainer>
      <スタック.ナビゲーター>
        * Stack.Screen はルーティングされたウィンドウであり、name はジャンプ先のウィンドウ名を設定し、ウィンドウのコンポーネント コンテンツはコンポーネント * に配置されます。
        <Stack.Screen name="Home" コンポーネント={HomeScreen} />
        <Stack.Screen name="詳細" コンポーネント={DetailsS​​creen} />
      </Stack.Navigator>
    </ナビゲーションコンテナ>
  );
}

デフォルトのアプリをエクスポートします。

ルートタイトルを設定する

デフォルトでは、ウィンドウはタイトルとして名前を使用しますが、自分で設定することもできます。

<Stack.Screen name="Home" コンポーネント={HomeScreen} オプション={{ title: 'my home'}} />

ナビゲーション タイトルとして Home ではなく my home を使用します。

通常、第 1 レベルのページから第 2 レベルのページにジャンプする場合、コンテンツに応じて異なるタイトルが表示されることがあります。このとき、タイトルを動的に設定する必要があります。

<Stack.Screen name="詳細" コンポーネント={DetailsS​​creen}
   オプション = {({ ルート }) => ({ タイトル: route.params.title })}
/>

次に、第 1 レベルのページにジャンプするときにタイトルを渡すだけです。

<ボタン
   title="詳細へ移動"
  // navigation.navigate('Details') はジャンプに使用され、Details は対応するウィンドウ名を指します
   onPress={() => navigation.navigate('詳細', { title: 'セカンダリページ' })}
/>

最初のレベルのページでタイトルが渡されない場合は、空のオブジェクトを渡すか、2 番目のレベルのウィンドウで初期値を設定するのが最適です。そうしないと、エラーが報告されます。

また、画面上のオプションのプロパティを変更するnavigation.setOptions()を使用してタイトルを手動で更新することもできます。

<ボタン
   title="タイトルを更新"
   onPress={() => navigation.setOptions({ title: '更新されました!' })}
/>

カスタムタイトルコンポーネント

カスタマイズ可能で画像にもできる機能コンポーネントを返すように headerTitle コールバックを設定します。

関数LogoTitle() {
  戻る (
    <画像
      スタイル={{ 幅: 50, 高さ: 50 }}
      ソース={require('./src/img/details.png')}
    />
  );
}

<Stack.Screen name="Home" コンポーネント={HomeScreen}
   オプション={{
     タイトル:「私の家」
     ヘッダータイトル: (props) => <LogoTitle {...props} />
   }}
/>

タイトルボタン

また、画面のオプションには、ボタンを配置できる headerRight があります。

        <Stack.Screen name="Home" コンポーネント={HomeScreen}
          オプション={{
            タイトル:「私の家」
            ヘッダータイトル: (props) => <LogoTitle {...props} />,
            ヘッダー右: () => (
              <ボタン
                onPress={() => alert('これはボタンです!')}
                title="情報"
                カラー="#fff"
              />
            )、
          }}
        />

headerBackImageSource は戻るボタンの画像を変更できます。

        <Stack.Screen name="詳細" コンポーネント={DetailsS​​creen}
          オプション={({ ルート }) => (
            {
              タイトル: route.params.title,
              ヘッダーバックイメージソース: detailsImg、
            }
          )}
        />

react-navigation6.x ルーティングライブラリの基本的な使い方についてはこれで終わりです。 react-navigation6.x ルーティングライブラリの関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • React-navigationはタイトルの内容を動的に変更します
  • Reactナビゲーションの使用中に遭遇した問題の概要
  • React Native react-navigation ナビゲーションの使用法の詳細
  • react-navigationでユーザーがログインしているかどうかを判断し、ログインページにジャンプする方法
  • react-navigation を使用した React Native でのクロスタブルーティング処理の詳細な説明
  • React Native 学習チュートリアル: カスタムナビゲーションバーの詳細な説明
  • ページジャンプナビゲーションに react-navigation を使用する React-native の例

<<:  MySQLクエリのパフォーマンスを分析する方法

>>:  CSSの省略記号とパディングを組み合わせた場合の問題の詳細な説明

推薦する

Docker 実行時にユーザーとグループを管理する方法

Docker はプロセスを中核としてシステムリソースを分離する管理ツールです。分離は、オペレーティン...

docker compose を使用して fastDFS ファイル サーバーを構築する方法

前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインス...

オンライン MYSQL 同期エラーのトラブルシューティング方法の概要 (必読)

序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...

スワイパープラグインを使用して Vue でカルーセルを実装する例

目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...

中国における中国語ドメイン名の人気は新たなクライマックスを迎えた

<br />外交部などの中央政府機関、各レベルの地方政府、その他の国家機関や部門が率先し...

MySQL でトリガーを無効化および有効化するチュートリアル [推奨]

MYSQL を使用する場合、トリガーがよく使用されますが、不適切な使用によって問題が発生する場合が...

MySQL でグループ化した後、各グループの最大値を取得する詳細な例

MySQL でグループ化した後、各グループの最大値を取得する詳細な例1. テストデータベーステーブル...

Unix/Linux システムにおける nobody ユーザーと nologin の詳細な紹介

Unix/Linux システムの nobody ユーザーとは何ですか? 1. Windows システ...

MySQL マスタースレーブレプリケーションの詳細な分析

序文: MySQL では、マスター/スレーブ アーキテクチャが最も基本的かつ最も一般的に使用されるア...

NodeはMySQLに接続し、追加、削除、変更、チェックのための実装コードをカプセル化します。

目次ノードはMysqlに接続しますMySQLモジュールをインストールするMySQLに接続するよく使わ...

HTMLでカメラを読み込む方法

効果図: 全体的な効果: ビデオ読み込み中: 写真:ステップ1: HTML要素を作成するまず、HTM...

CSS セレクターの重みの理解(個人テスト)

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

MySQLデータベース移行におけるデータ文字化けの問題を解決する

リーダーの指示のもと、Java プロジェクトを引き継ぎ、リファクタリングを行う必要がありました。同時...

MYSQL の 3 つのツリー構造テーブル設計の長所と短所の簡単な分析と共有

目次導入質問設計 1: 隣接リストテーブルデザインSQL の例デザイン 2: パスの列挙テーブルデザ...

Dockerを使用してRedisクラスターを構築する方法

目次1. Redis Dockerベースイメージを作成する2. Redisノードイメージを作成する3...