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.mzph.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…