本文將探討 React 出口的功能以及 React 應用程式中的路由基礎。首先也是最重要的,我們要了解路由的基礎知識
了解基礎知識
在深入研究之前,讓我們確保我們對 React Router 有深入的了解。
什麼是 React Router? React Router 是一個流行的 JavaScript 函式庫,可以在 React 應用程式中的不同視圖之間進行導航。它允許您定義路由,將 URL 對應到特定元件。更多..
-
為什麼路由很重要? 路由對於建立單頁應用程式 (SPA) 至關重要,使用者無需重新載入整頁即可導航,從而創建更流暢、更動態的體驗。
現在讓我們深入了解 React Outlet
什麼是 React Outlet?
;元件是父路由元件中的佔位符,它告訴 React Router 在哪裡渲染子路由。它就像一個動態容器,根據當前 URL 更改其內容。
此功能有助於管理複雜的佈局,其中頁面的一部分保持一致,例如標題或側邊欄,而其他部分則根據路線動態變化。
它是如何運作的:當 URL 與父路由相符時,React Router 會尋找
讓我們為 React 應用程式使用正確的 React 路由來實現 Outlet
import React from "react"; // import components import AllRoutes from "./routes"; // component const App = () => { return ( <allroutes></allroutes> > ); }; export default App;
這個AllRoutes元件使用react-router-dom為React應用程式定義了一個路由系統,它處理React Web應用程式中不同頁面之間的導航。這是代碼的詳細分解
import React from "react"; // import components import AllRoutes from "./routes"; // component const App = () => { return ( <allroutes></allroutes> > ); }; export default App;
導入套件
BrowserRouter:此元件支援在瀏覽器中進行路由。它使用 HTML5 歷史 API 來保持 UI 與 URL 同步。
Outlet、Route、Routes:這些元件定義和處理應用程式中的各種路由(或頁面)。
Suspense:Suspense 用於處理延遲載入的元件。它在載入元件時顯示後備元件(在本例中為自訂載入器)。
惰性:此函數僅在需要時才延遲載入元件,從而實現程式碼分割,透過減少初始套件大小來提高應用程式的效能。
載入器:這是一個自訂元件,在延遲載入元件時顯示載入指示器。
ProtectedRoute:此自訂元件可確保某些路由只能由授權使用者存取,從而增強安全性。
根路由(/):該路由用於我們應用程式的根路徑。它呈現登入元件。
導入路線
應用程式從單獨的檔案 (routePaths) 匯入預定義路徑(例如儀表板、homePath、loginPath、rootPath)。這使得程式碼更容易維護,並避免在元件內硬編碼路由路徑。
在 AllRoutesComponent 中定義路由
主函數 AllRoutesComponent 定義如何處理應用程式中的不同路由:
:定義單一路線。 path 屬性定義 URL 模式,element 屬性指定要為該路由渲染的元件。
根 (rootPath) 路由充當子路由的容器。
索引路由在使用者存取 / 路徑時預設渲染 LoginComponent。
/login 路徑也會渲染 LoginComponent。
像 /home 和 /dashboard 這樣的路由被包裝在 ProtectedRoute 元件中,確保只有授權使用者才能存取這些頁面。
受保護的路線有哪些?
一些路由(如 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 中的這個鉤子可以實現程式設計導航。它用於在用戶未經身份驗證時重定向用戶。
Outlet:這是受保護路由內嵌套路由的佔位符。它允許動態渲染子路由。
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 元件進行渲染。
試試這篇文章,用routeroutlet實作延遲載入路由
結論
React 中使用 Outlet 進行延遲載入路由是透過減少應用程式的初始載入時間來最佳化效能的強大方法。透過使用 React.lazy() 和 Suspense,您可以確保僅在需要時載入元件,而 Outlet 元件則允許高效的巢狀路由。與受保護路由的使用相結合,此方法提供了一個模組化、可擴展且效能友善的結構,用於管理應用程式中的路由。
就是這樣!
嘗試一下,並在評論中告訴我你的想法!
以上是了解具有正確路由的 React Outlet的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6
視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。