ホームページ ウェブフロントエンド jsチュートリアル 適切なルーティングを備えた React Outlet について理解する

適切なルーティングを備えた React Outlet について理解する

Oct 20, 2024 am 06:28 AM

Understanding about React Outlet with proper routing

この記事では、React アウトレットがどのように機能するか、および React アプリケーションのルーティングの基礎について説明します。何よりもまず、ルーティングの基本を理解する必要があります

基本を理解する

本題に入る前に、React Router についてしっかりと理解しておいてください。

  • React Router とは何ですか? React Router は、React アプリケーションの異なるビュー間のナビゲーションを可能にする人気の JavaScript ライブラリです。 URL を特定のコンポーネントにマップするルートを定義できます。詳細..

  • ルーティングが重要な理由 ルーティングは、ユーザーがページ全体をリロードせずにナビゲートできるシングルページ アプリケーション (SPA) を構築するために不可欠であり、よりスムーズで動的なエクスペリエンスを実現します。

それでは、React アウトレットについて見ていきましょう

リアクトアウトレットとは何ですか?

コンポーネントは、親ルートのコンポーネント内のプレースホルダーで、React Router に子ルートをレンダリングする場所を指示します。これは、現在の URL に基づいてコンテンツを変更する動的コンテナのように機能します。
この機能は、ページの一部 (ヘッダーやサイドバーなど) の一貫性が維持され、他の部分がルートに基づいて動的に変更される複雑なレイアウトの管理に役立ちます。

仕組み: URL が親ルートと一致すると、React Router は を探します。その親コン​​ポーネント内で。次に、一致する子ルートのコンポーネントをその にレンダリングします。

React アプリケーションに適切な反応ルーティングを備えたアウトレットを実装してみましょう

import React from "react";

// import components
import AllRoutes from "./routes";

// component
const App = () => {
  return (
    <>

      <AllRoutes />
    </>
  );
};
export default App;

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この AllRoutes コンポーネントは、react Web アプリ内の異なるページ間のナビゲーションを処理する、react-router-dom を使用して React アプリケーションのルーティング システムを定義します。コードの詳細な内訳は次のとおりです

import React from "react";

// import components
import AllRoutes from "./routes";

// component
const App = () => {
  return (
    <>

      <AllRoutes />
    </>
  );
};
export default App;

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

パッケージのインポート

BrowserRouter: このコンポーネントはブラウザでのルーティングを有効にします。 HTML5 履歴 API を使用して、UI と URL の同期を維持します。
アウトレット、ルート、ルート: これらのコンポーネントは、アプリケーション内のさまざまなルート (またはページ) を定義および処理します。
Suspense: Suspense は、遅延ロードされたコンポーネントを処理するために使用されます。コンポーネントのロード中にフォールバック コンポーネント (この場合はカスタム ローダー) が表示されます。
Lazy: この関数は、必要な場合にのみコンポーネントを遅延ロードすることでコード分割を可能にし、初期バンドル サイズを削減することでアプリのパフォーマンスを向上させます。
ローダー: これは、コンポーネントが遅延ロードされている間に読み込みインジケーターを表示するカスタム コンポーネントです。
ProtectedRoute: このカスタム コンポーネントは、承認されたユーザーのみが特定のルートにアクセスできるようにし、セキュリティを強化します。
ルート ルート (/): このルートはアプリケーションのルート パス用です。 Login コンポーネントをレンダリングします。

ルート パスのインポート

アプリケーションは、事前定義されたパス (ダッシュボード、ホームパス、ログインパス、ルートパスなど) を別のファイル (ルートパス) からインポートします。これにより、コードの保守が容易になり、コンポーネント内のルート パスのハードコーディングが回避されます。

AllRoutesComponent でのルートの定義

メイン関数 AllRoutesComponent は、アプリ内のさまざまなルートがどのように処理されるかを定義します。
: ルーティング構造をラップし、ブラウザのナビゲーションを管理します。
: このコンポーネントは、アプリケーションの定義されたすべてのルートを保持します。
: 単一のルートを定義します。 path prop は URL パターンを定義し、要素 prop はそのルートに対してレンダリングするコンポーネントを指定します。

  • ルート (rootPath) ルートは、子ルートのコンテナとして機能します。

  • ユーザーが / パスにアクセスすると、インデックス ルートはデフォルトで LoginComponent をレンダリングします。

  • /login パスは LoginComponent もレンダリングします。

  • /home や /dashboard などのルートは ProtectedRoute コンポーネント内にラップされ、承認されたユーザーのみがこれらのページにアクセスできるようにします。

: これにより、ネストされたルートをレンダリングできます。子ルート (/login、/home など) は親ルート (rootPath) 内にレンダリングされます。

保護されたルートとは何ですか?

一部のルート (homePath やダッシュボードなど) は ProtectedRoute 要素内にネストされています。これは、ユーザーがこれらのページにアクセスするには、特定の条件 (ログインなど) を満たす必要があることを意味します。ユーザーが承認されていない場合、ProtectedRoute コンポーネントは通常、ユーザーをログイン ページまたはエラー ページにリダイレクトします。
保護されたルートのコードは次のとおりです

// import packages

import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";
import React, { Suspense, lazy } from "react";
import {
  dashboard,
  homePath,
  loginPath,
  rootPath
} from "./routePaths";

import Loader from "../components/loader";
import ProtectedRoute from "./protectedRoute";

// import route paths

const LoginComponent = lazy(() => import("../pages/login"));
const HomeComponent = lazy(() => import("../pages/home"));
const RouteNotFoundComponent = lazy(() => import("../pages/pageNotFound"));

const DashboardComponent = lazy(() => import("../pages/dashboard/"));

const AllRoutesComponent = () => {
  return (
    <Suspense fallback={<Loader />}>
      <BrowserRouter>
        <Routes>
          <Route path={rootPath} element={<Outlet />}>
            <Route index element={<LoginComponent />} />
            <Route path={loginPath} element={<LoginComponent />} />
            <Route element={<ProtectedRoute />}>
              <Route path={homePath} element={<HomeComponent />} />
              <Route path={dashboard} element={<DashboardComponent />} />
            </Route>
            <Route path="*" element={<RouteNotFoundComponent />} />
          </Route>
        </Routes>
      </BrowserRouter>
    </Suspense>
  );
};

export default AllRoutesComponent;
ログイン後にコピー

コードの説明

  • パッケージのインポート

React、{ useEffect }: React は UI を構築するためのコア パッケージであり、useEffect は機能コンポーネントで副作用を実行するフックです。ここでは、ユーザーが認証されていない場合にリダイレクトを処理するために useEffect が使用されます。
useNavigate:react-router-dom のこのフックにより、プログラムによるナビゲーションが可能になります。ユーザーが認証されていない場合にユーザーをリダイレクトするために使用されます。
アウトレット: これは、保護されたルート内のネストされたルートのプレースホルダーです。これにより、子ルートを動的にレンダリングできるようになります。
BaseLayout: このコンポーネントは、保護されたルートをレイアウトでラップし、保護されたページに一貫した外観と構造を提供します。

  • コンポーネントの定義

useNavigate(): このフックを使用すると、さまざまなルートに移動できます。この場合、ユーザーが認証されていない場合に rootPath に移動するために使用されます。
isAuthenticated および user: これらの値は現時点ではハードコーディングされていますが、通常はグローバル状態またはコンテキストから認証状態 (JWT トークン、セッション データなど) をチェックすることによって動的に設定できます。
isAuthenticated: ユーザーが認証されているかどうかを決定するフラグ。 false の場合、ユーザーはリダイレクトされます。
user: 現在ログインしているユーザー。この値はコンテキストまたはグローバル状態から動的に取得できますが、現時点ではハードコードされた文字列 ('shruti') です。

useEffect: useEffect フックは、認証されるか、変更に移動するたびに実行されます。
useEffect 内のコードは、ユーザーが認証されているかどうかをチェックします。そうでない場合 (! 認証されている場合)、ユーザーはナビゲート機能を使用してルート パスにリダイレクトされます。
{ replace: true } オプションを使用すると、ブラウザの履歴にリダイレクトが追加されなくなります。つまり、ユーザーは保護されたページに戻ることができなくなります。

それでは、BaseLayout コンポーネントのコードを見てみましょう

import React from "react";

// import components
import AllRoutes from "./routes";

// component
const App = () => {
  return (
    <>

      <AllRoutes />
    </>
  );
};
export default App;

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

BaseLayout コンポーネントは、アプリケーション内のすべてのページの共通レイアウト構造として機能します。
サイドバーやメインコンテンツ領域などの共通要素が含まれています。
さまざまなルートの子コンポーネントは、メイン コンテンツ領域内の Outlet コンポーネントを使用してレンダリングされます。

この記事を試して、ルーター アウトレットを使用した遅延読み込みルーティングを実装してください

結論

React の Outlet を使用した遅延読み込みルーティングは、アプリの初期読み込み時間を短縮することでパフォーマンスを最適化する強力な方法です。 React.lazy() と Suspense を使用すると、コンポーネントが必要な場合にのみロードされるようになり、Outlet コンポーネントにより効率的なネストされたルーティングが可能になります。このアプローチは、保護されたルートの使用と組み合わせることで、アプリケーション内のルートを管理するためのモジュール式でスケーラブルでパフォーマンスに優れた構造を提供します。

それでおしまい!

ぜひ試してみて、コメントでご意見をお聞かせください!

以上が適切なルーティングを備えた React Outlet について理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

JavaScriptとWeb:コア機能とユースケース JavaScriptとWeb:コア機能とユースケース Apr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScript in Action:実際の例とプロジェクト JavaScript in Action:実際の例とプロジェクト Apr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンの理解:実装の詳細 JavaScriptエンジンの理解:実装の詳細 Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

Python vs. JavaScript:コミュニティ、ライブラリ、リソース Python vs. JavaScript:コミュニティ、ライブラリ、リソース Apr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Python vs. JavaScript:開発環境とツール Python vs. JavaScript:開発環境とツール Apr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScript通訳者とコンパイラにおけるC/Cの役割 JavaScript通訳者とコンパイラにおけるC/Cの役割 Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

Python vs. JavaScript:ユースケースとアプリケーションと比較されます Python vs. JavaScript:ユースケースとアプリケーションと比較されます Apr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

See all articles