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

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></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></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"></suspense>}>
      <browserrouter>
        <routes>
          <route path="{rootPath}" element="{<Outlet"></route>}>
            <route index element="{<LoginComponent"></route>} />
            <route path="{loginPath}" element="{<LoginComponent"></route>} />
            <route element="{<ProtectedRoute"></route>}>
              <route path="{homePath}" element="{<HomeComponent"></route>} />
              <route path="{dashboard}" element="{<DashboardComponent"></route>} />
            
            <route path="*" element="{<RouteNotFoundComponent"></route>} />
          
        </routes>
      </browserrouter>
    
  );
};

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></allroutes>
    >
  );
};
export default App;

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

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

結論

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

それでおしまい!

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

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:開発者の比較分析Python vs. JavaScript:開発者の比較分析May 09, 2025 am 12:22 AM

PythonとJavaScriptの主な違いは、タイプシステムとアプリケーションシナリオです。 1。Pythonは、科学的コンピューティングとデータ分析に適した動的タイプを使用します。 2。JavaScriptは弱いタイプを採用し、フロントエンドとフルスタックの開発で広く使用されています。この2つは、非同期プログラミングとパフォーマンスの最適化に独自の利点があり、選択する際にプロジェクトの要件に従って決定する必要があります。

Python vs. JavaScript:ジョブに適したツールを選択するPython vs. JavaScript:ジョブに適したツールを選択するMay 08, 2025 am 12:10 AM

PythonまたはJavaScriptを選択するかどうかは、プロジェクトの種類によって異なります。1)データサイエンスおよび自動化タスクのPythonを選択します。 2)フロントエンドとフルスタック開発のためにJavaScriptを選択します。 Pythonは、データ処理と自動化における強力なライブラリに好まれていますが、JavaScriptはWebインタラクションとフルスタック開発の利点に不可欠です。

PythonとJavaScript:それぞれの強みを理解するPythonとJavaScript:それぞれの強みを理解するMay 06, 2025 am 12:15 AM

PythonとJavaScriptにはそれぞれ独自の利点があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1. Pythonは、データサイエンスやバックエンド開発に適した簡潔な構文を備えた学習が簡単ですが、実行速度が遅くなっています。 2。JavaScriptはフロントエンド開発のいたるところにあり、強力な非同期プログラミング機能を備えています。 node.jsはフルスタックの開発に適していますが、構文は複雑でエラーが発生しやすい場合があります。

JavaScriptのコア:CまたはCの上に構築されていますか?JavaScriptのコア:CまたはCの上に構築されていますか?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc;それは、解釈されていることを解釈しました。

JavaScriptアプリケーション:フロントエンドからバックエンドまでJavaScriptアプリケーション:フロントエンドからバックエンドまでMay 04, 2025 am 12:12 AM

JavaScriptは、フロントエンドおよびバックエンド開発に使用できます。フロントエンドは、DOM操作を介してユーザーエクスペリエンスを強化し、バックエンドはnode.jsを介してサーバータスクを処理することを処理します。 1.フロントエンドの例:Webページテキストのコンテンツを変更します。 2。バックエンドの例:node.jsサーバーを作成します。

Python vs. Javascript:どの言語を学ぶべきですか?Python vs. Javascript:どの言語を学ぶべきですか?May 03, 2025 am 12:10 AM

PythonまたはJavaScriptの選択は、キャリア開発、学習曲線、エコシステムに基づいている必要があります。1)キャリア開発:Pythonはデータサイエンスとバックエンド開発に適していますが、JavaScriptはフロントエンドおよびフルスタック開発に適しています。 2)学習曲線:Python構文は簡潔で初心者に適しています。 JavaScriptの構文は柔軟です。 3)エコシステム:Pythonには豊富な科学コンピューティングライブラリがあり、JavaScriptには強力なフロントエンドフレームワークがあります。

JavaScriptフレームワーク:最新のWeb開発のパワーJavaScriptフレームワーク:最新のWeb開発のパワーMay 02, 2025 am 12:04 AM

JavaScriptフレームワークのパワーは、開発を簡素化し、ユーザーエクスペリエンスとアプリケーションのパフォーマンスを向上させることにあります。フレームワークを選択するときは、次のことを検討してください。1。プロジェクトのサイズと複雑さ、2。チームエクスペリエンス、3。エコシステムとコミュニティサポート。

JavaScript、C、およびブラウザの関係JavaScript、C、およびブラウザの関係May 01, 2025 am 12:06 AM

はじめに私はあなたがそれを奇妙に思うかもしれないことを知っています、JavaScript、C、およびブラウザは正確に何をしなければなりませんか?彼らは無関係であるように見えますが、実際、彼らは現代のウェブ開発において非常に重要な役割を果たしています。今日は、これら3つの間の密接なつながりについて説明します。この記事を通して、JavaScriptがブラウザでどのように実行されるか、ブラウザエンジンでのCの役割、およびそれらが協力してWebページのレンダリングと相互作用を駆動する方法を学びます。私たちは皆、JavaScriptとブラウザの関係を知っています。 JavaScriptは、フロントエンド開発のコア言語です。ブラウザで直接実行され、Webページが鮮明で興味深いものになります。なぜJavascrを疑問に思ったことがありますか

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Mac版

SublimeText3 Mac版

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