React 第三十七節 Router 中 useOutlet Hook的使用介紹以及注意事項

React Router 中的 useOutlet 是 v6 版本新增的 Hook,用于在父路由組件中訪問當前嵌套的子路由元素。它提供了比 <Outlet> 組件更靈活的控制方式,適合需要根據子路由狀態進行動態處理的場景。

一、useOutlet的基本用法

import { useOutlet } from 'react-router-dom';function ParentLayout() {// 返回當前匹配的子路由元素(未匹配時返回 null)const outlet = useOutlet();return (<div><h1>Parent Layout</h1><nav>{/* 導航鏈接 */}</nav>{/* 等價于直接使用 <Outlet /> */}{outlet || <div>Default content when no sub-route matches</div>}</div>);
}

二、useOutlet的典型使用場景

2.1. 條件渲染布局

function AuthLayout() {const outlet = useOutlet();return (<div className="auth-layout">{outlet ? (// 有子路由時顯示帶背景的布局<div className="auth-background">{outlet}</div>) : (// 無子路由時顯示默認內容<Navigate to="/login" />)}</div>);
}

2.2. 動態處理子路由

function AnimationLayout() {const outlet = useOutlet();const [prevOutlet, setPrevOutlet] = useState(outlet);// 保留舊路由用于退場動畫if (outlet) setPrevOutlet(outlet);return (<AnimatePresence mode="wait"><motion.divkey={location.pathname}initial={{ opacity: 0 }}animate={{ opacity: 1 }}exit={{ opacity: 0 }}>{outlet || prevOutlet}</motion.div></AnimatePresence>);
}

三、useOutlet的路由配置示例

const router = createBrowserRouter([{path: '/',element: <ParentLayout />,children: [{path: 'dashboard',element: <Dashboard />,},{path: 'profile',element: <UserProfile />,}]}
]);

四、useOutlet的使用注意事項

4.1、上下文依賴

只能在被 <RouterProvider><BrowserRouter> 包裹的組件中使用,否則會拋出錯誤。

4.2、路由匹配規則

子路由需要正確配置在父路由的 children 數組中,且路徑需要正確嵌套:

// ? 錯誤配置(缺少父路徑)
children: [{ path: '/dashboard', ... }]// ? 正確配置
children: [{ path: 'dashboard', ... }] // 實際路徑為 /dashboard

4.3、null 值處理

當沒有匹配的子路由時返回 null,建議總是處理空狀態:

// 推薦寫法
{outlet || <FallbackComponent />}// 危險寫法(可能渲染 undefined)
{outlet}

4.4、性能優化

<Outlet> 不同,直接使用 useOutlet 不會自動處理 Suspense,需要自行添加錯誤邊界:

function SafeOutlet() {const outlet = useOutlet();return <ErrorBoundary>{outlet}</ErrorBoundary>;
}

4.5、路由狀態更新

當 URL 變化但父路由保持匹配時,useOutlet 會返回新的 React 元素,可以用 useLocation 監聽變化:

const outlet = useOutlet();
const location = useLocation();useEffect(() => {console.log('Sub-route changed:', location.pathname);
}, [location]);

五、useOutlet 與 的對比

在這里插入圖片描述

六、useOutlet 使用總結建議:

大多數簡單場景直接使用 <Outlet> 更合適

需要以下高級功能時選擇 useOutlet:

6.1、動態布局切換
6.2、路由過渡動畫
6.3、自定義空狀態處理
6.4、基于子路由的復雜條件渲染

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79104.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TDengine 在智慧油田領域的應用

簡介 智慧油田&#xff0c;亦稱為數字油田或智能油田&#xff0c;是一種采用尖端信息技術與先進裝備的現代油田開發模式。該模式通過實時更新油氣田層析圖及動態生產數據&#xff0c;顯著提高了油氣田的開發效率與經濟價值。 信息技術在此領域發揮著至關重要的作用&#xff0…

關于AI 大數據模型的基礎知識 雜記

一、LM Studio LM Studio下載地址&#xff1a;LM Studio - Discover, download, and run local LLMshttps://lmstudio.ai/LM Studio是使用electron架構&#xff0c;引用的llama.cpp庫。 下載后的模型存儲于 /User/Admin/.lmstudio/models中。 二、llama.cpp庫下載地址 llam…

2025數維杯數學建模競賽B題完整參考論文(共38頁)(含模型、代碼、數據)

2025數維杯數學建模競賽B題完整參考論文 目錄 摘要 一、問題重述 二、問題分析 三、模型假設 四、定義與符號說明 五、 模型建立與求解 5.1問題1 5.1.1問題1思路分析 5.1.2問題1模型建立 5.1.3問題1求解結果 5.2問題2 5.2.1問題2思路分析 5.2.2問題2…

利用GPT實現油猴腳本—網頁滾動(優化版)

在瀏覽網頁的時候&#xff0c;發現有的網頁沒有直達最前這樣的功能&#xff0c;所有心血來潮利用ChatGPT寫了一個油猴腳本以實現此功能&#xff0c;在網站上出現一個可以自由拖動的滑塊。 聲明&#xff1a;引用或二創需注明出處。 如圖&#xff1a; 點擊即可直達當前網頁最前、…

MySQL基礎關鍵_013_常用 DBA 命令

目 錄 一、MySQL 用戶信息存儲位置 二、新建用戶 1.創建本地用戶 2.創建外網用戶 三、用戶授權 1.說明 2.實例 四、撤銷授權 五、修改用戶密碼 六、修改用戶名、主機名/IP地址 七、刪除用戶 八、數據備份 1.導出數據 2.導入數據 &#xff08;1&#xff09;方式…

計算機視覺與深度學習 | 圖像匹配算法綜述

圖像匹配算法綜述 圖像匹配 圖像匹配算法綜述一、算法分類二、經典算法原理與公式1. **SIFT (Scale-Invariant Feature Transform)**2. **ORB (Oriented FAST and Rotated BRIEF)**3. **模板匹配(歸一化互相關,NCC)**4. **SuperPoint(深度學習)**三、代碼示例1. **SIFT 特…

切比雪夫不等式詳解

切比雪夫不等式詳解 一、引言 切比雪夫不等式&#xff08;Chebyshev’s Inequality&#xff09;是概率論和統計學中最重要的基本定理之一&#xff0c;由俄國數學家切比雪夫&#xff08;P. L. Chebyshev&#xff0c;1821-1894&#xff09;提出。它為我們提供了一個強大工具&am…

霸王茶姬微信小程序自動化簽到系統完整實現解析

霸王茶姬微信小程序自動化簽到系統完整實現解析 技術棧&#xff1a;Node.js 微信小程序API MD5動態簽名 一、腳本全景架構 功能模塊圖 #mermaid-svg-0vx5W2xo0IZWn6mH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

氣動帶刮刀硬密封固定式對夾球閥:專為高粘度、強腐蝕性介質設計的工業解決方案-耀圣

氣動帶刮刀硬密封固定式對夾球閥&#xff1a;專為高粘度、強腐蝕性介質設計的工業解決方案 在石油化工、鋰電材料、污水處理等高難度工況中&#xff0c;帶顆粒的高粘度介質、料漿及強腐蝕性流體對閥門的性能提出了嚴苛要求。 氣動帶刮刀硬密封固定式對夾球閥憑借其獨特的結構…

Filecoin存儲管理:如何停止Lotus向特定存儲路徑寫入新扇區數據

Filecoin存儲管理&#xff1a;如何停止Lotus向特定存儲路徑寫入新扇區數據 引言背景問題場景解決方案步驟1&#xff1a;修改sectorstore.json文件步驟2&#xff1a;重新加載存儲配置步驟3&#xff1a;驗證更改 技術原理替代方案最佳實踐結論 引言 在Filecoin挖礦過程中&#x…

互聯網大廠Java求職面試:高并發系統設計與架構實戰

互聯網大廠Java求職面試&#xff1a; 高并發系統設計與架構實戰 第一輪提問&#xff1a;基礎概念與核心原理 技術總監&#xff08;嚴肅&#xff09;&#xff1a;鄭薪苦&#xff0c;你對JVM的內存模型了解多少&#xff1f;能說說堆、棧、方法區的區別嗎&#xff1f; 鄭薪苦&a…

AD原理圖復制較多元器件時報錯:“InvalidParameter Exception Occurred In Copy”

一、問題描述 AD原理圖復制較多元器件時報錯&#xff1a;AD原理圖復制較多元器件時報錯&#xff1a;“InvalidParameter Exception Occurred In Copy”。如下圖 二、問題分析 破解BUG。 三、解決方案 1、打開參數配置 2、打開原理圖優先項中的通用配置&#xff0c;取消勾選G…

網絡研討會開發注冊中, 5月15日特勵達力科,“了解以太網”

在線研討會主題 Understanding Ethernet - from basics to testing & optimization 了解以太網 - 從基礎知識到測試和優化 注冊鏈接# https://register.gotowebinar.com/register/2823468241337063262 時間 北京時間 2025 年 5 月 15 日 星期四 下午 3:30 - 4:30 適宜…

Spring Boot中的攔截器!

每次用戶請求到達Spring Boot服務端&#xff0c;你是否需要重復寫日志、權限檢查或請求格式化代碼&#xff1f;這些繁瑣的“前置后置”工作讓人頭疼&#xff01;好在&#xff0c;Spring Boot攔截器如同一道智能關卡&#xff0c;統一處理請求的橫切邏輯&#xff0c;讓代碼優雅又…

三個線程 a、b、c 并發運行,b,c 需要 a 線程的數據如何解決

說明&#xff1a; 開發中經常會碰到線程并發&#xff0c;但是后續線程需要等待第一個線程執行完返回結果后&#xff0c;才能再執行后面線程。 如何處理呢&#xff0c;今天就介紹兩種方法 1、使用Java自有的API即CountDownLatch&#xff0c;進行實現 思考&#xff1a;CountDown…

js原型污染 + xss劫持base -- no-code b01lersctf 2025

題目信息:Found this new web framework the other day—you don’t need to write any code, just JSON. 我們先來搞清楚究竟發生了什么 當我們訪問 /index /*** 處理 /:page 路徑的 GET 請求* param {Object} req - 請求對象* param {Object} reply - 響應對象* returns {Pro…

Qwen智能體qwen_agent與Assistant功能初探

Qwen智能體qwen_agent與Assistant功能初探 一、Qwen智能體框架概述 Qwen&#xff08;通義千問&#xff09;智能體框架是阿里云推出的新一代AI智能體開發平臺&#xff0c;其核心模塊qwen_agent.agent提供了一套完整的智能體構建解決方案。該框架通過模塊化設計&#xff0c;將L…

vue數據可視化開發常用庫

一、常用數據可視化庫 1. ECharts 特點&#xff1a;功能強大&#xff0c;支持多種圖表類型&#xff0c;社區活躍。適用場景&#xff1a;復雜圖表、大數據量、3D 可視化。安裝&#xff1a;npm install echarts示例&#xff1a;<template><div ref"chart" c…

小紅書視頻無水印下載方法

下載小紅書&#xff08;RED/Xiaohongshu&#xff09;視頻并去除水印可以通過以下幾種方法實現&#xff0c;但請注意尊重原創作者版權&#xff0c;下載內容僅限個人使用&#xff0c;避免侵權行為。 方法一&#xff1a;使用在線解析工具&#xff08;推薦&#xff09; 復制視頻鏈…

Qt讀寫XML文檔

XML 結構與概念簡介 XML&#xff08;可擴展標記語言&#xff09; 是一種用于存儲和傳輸結構化數據的標記語言。其核心特性包括&#xff1a; 1、樹狀結構&#xff1a;XML 數據以層次化的樹形結構組織&#xff0c;包含一個根元素&#xff08;Root Element&#xff09;&#xff…