在React Router 6中使用useRouteLoaderData钩子获取自定义路由信息

news/2024/5/13 9:01:39

在 React Router 6 中怎么像vueRouter一样,可以在配置路由的时候,定义路由的元信息(附加信息)?答案是可以的。稍有些复杂。核心是通过为每个路由定义了一个 loader 函数,用于返回自定义的路由信息,然后通过useRouteLoaderData 钩子来获取自定义的路由信息。
在这里插入图片描述
在 React Router 6 中,你可以使用新引入的 useRouteLoaderData 钩子来获取自定义的路由信息。这个钩子允许你在路由级别加载和管理数据,包括自定义的路由信息。

以下是具体的步骤:

  1. 定义路由及自定义信息

首先,你需要在定义路由时添加自定义信息。这可以通过在每个路由对象上添加一个 loader 函数来实现。

// routes.js
import { Home, About, Product } from './components';export const routes = [{path: '/',id:"home",element: <Home />,loader: () => ({ title: '首页' }),},{path: '/about',id:"about",element: <About />,loader: () => ({ title: '关于我们' }),},{path: '/product/:id',id:"product_id",element: <Product />,loader: ({ params }) => ({ title: `产品 ${params.id}` }),},
];

在这个示例中,我们为每个路由定义了一个 loader 函数,用于返回自定义的路由信息,例如页面标题。

  1. 创建路由器实例

接下来,你需要使用 createBrowserRoutercreateHashRouter 来创建路由器实例,并将其传递给 RouterProvider

// index.jsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import { routes } from './routes';const router = createBrowserRouter(routes);ReactDOM.createRoot(document.getElementById('root')).render(<React.StrictMode><RouterProvider router={router} /></React.StrictMode>
);
  1. 使用 useRouteLoaderData 钩子

现在,你可以在组件中使用 useRouteLoaderData 钩子来获取自定义的路由信息。

// components/Home.jsx
import { useRouteLoaderData } from 'react-router-dom';const Home = () => {const { title } = useRouteLoaderData('home'); //非常关键,路由配置要id,否则取不到return (<div><h1>{title}</h1>{/* 其他内容 */}</div>);
};export default Home;

在这个示例中,useRouteLoaderData 钩子返回了在路由定义中设置的自定义数据对象。我们使用对象解构来获取 title 属性,并在组件中进行渲染。

你还可以在父组件中使用 useRouteLoaderData 钩子,然后将数据作为 props 传递给子组件。这样可以在多个组件之间共享自定义路由信息。

总的来说,通过在路由定义中添加 loader 函数并使用 useRouteLoaderData 钩子,你可以在 React Router 6 中方便地获取和使用自定义的路由信息。这个新特性使得在路由级别管理数据变得更加简单和集中。


http://www.mrgr.cn/p/00270854

相关文章

自动驾驶半实物仿真平台设计方案:827-8路GMSL视频注入回灌的自动驾驶半实物仿真平台

8路GMSL视频注入回灌的自动驾驶半实物仿真平台一、平台介绍产品基于8路GMSL视频注入回灌的自动驾驶半实物仿真平台旨在提高实验室及研究生院师生在基础软件层开发、计算机视觉和深度学习方面的专业知识学习和实践能力,为师生提供一个稳定软件开发和多精度框架学习和训练平台,…

【Vue3+Tres 三维开发】01-HelloWord

预览 什么是TRESJS 简单的说,就是基于THREEJS封装的能在vue3中使用的一个组件,可以像使用组件的方式去创建场景和模型。优势就是可以快速创建场景和要素的添加,并且能很明确知道创景中的要素构成和结构。 项目创建 npx create-vite@latest # 选择 vue typescript安装依赖…

js的算法-插入排序(折半插入排序)

直接插入排序的步骤 1. 从前面的有序子表中查找出待插入元素应该被插入的位置 2. 给插入位置腾空间 3. 将待插入元素复制到表中的插入位置。 直接插入排序&#xff1a;边比较边移动&#xff1b; 折半插入排序 先折半查找出元素的待插入位置&#xff0c;然后统一地移动待插…

[NewStarCTF] UnserializeOne __clone魔术方法

今天来个反序列化没见过的魔术方法__clone。 先看源码:点击查看代码 class Start{public $name;protected $func;public function __destruct(){echo "Welcome to NewStarCTF, ".$this->name;}public function __isset($var){($this->func)();} }class Sec{pr…

.net core,.net 6使用SoapCore开发webservice接口,以及使用HttpClientFactory动态访问webservice接口

1.使用soapCore nuget包 2.新建接口及实现 2.1新建接口 2.2新建实现 2.3新建接收实体 2.4返回实体 3.接口注入使用 4.启动程序,直接访问对应的asmx地址本文来自博客园,作者:WantRemake,转载请注明原文链接:https://www.cnblogs.com/SmallChen/p/18163874

Spring Cloud 运维篇1——Jenkins CI/CD 持续集成部署

Jenkins 1、Jenkins是什么&#xff1f; Jenkins 是一款开源 CI/CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者一个独立的 Java 程序。 Jenkins Docker Compose持续集成流…

java实现解析html获取图片或视频url

一、前言 有时在实际项目中&#xff0c;比如发布某篇文章&#xff0c;需要取文章中的某张图片作为封面&#xff0c;那么此时需要文章内容&#xff0c;获取html内容中的图片地址作为封面&#xff0c;下面讲下如何获取html中的图片或视频地址。 二、实现 1.先定义一个工具类&…

关于远程桌面端口的优化措施的建议

在信息技术的世界中&#xff0c;远程桌面连接已成为企业、教育和个人用户之间共享信息、协作工作的重要工具。而这一切的背后&#xff0c;都离不开远程桌面端口&#xff08;RDP&#xff0c;Remote Desktop Protocol Port&#xff09;的支持。RDP端口不仅关乎到远程访问的顺畅性…

Fast-DetectGPT 无需训练的快速文本检测

本文提出了一种新的文本检测方法 ——Fast-DetectGPT&#xff0c;无需训练&#xff0c;直接使用开源小语言模型检测各种大语言模型&#xff0c;如GPT等生成的文本内容。 Fast-DetectGPT 将检测速度提高了 340 倍&#xff0c;将检测准确率相对提升了 75%&#xff0c;超过商用系…

vscode 快捷件的配置文件地址 C:\Users\Reciter\AppData\Roaming\Code\User\keybindings.json

vscode 快捷件的配置文件地址 C:\Users\Reciter\AppData\Roaming\Code\User\keybindings.json 更改快捷键冲突 我要把 Quick Go To Selected File Path 插件的快捷键 Ctrl + E,换成 F12, 插件文章:https://www.cnblogs.com/pengchenggang/p/18163728 但是系统里面已经有好几个…

U盘惊变0字节?别慌,看这里解决你的数据危机!

在日常生活和工作中&#xff0c;U盘已成为我们随身携带重要数据的必备工具。然而&#xff0c;有时我们会遇到一个令人头疼的问题——U盘容量突然显示为0字节。当你发现原本存满文件的U盘一夜之间似乎被清空&#xff0c;显示容量为0字节时&#xff0c;心中的慌乱可想而知。但请不…

技术速递|利用 Redis 使 AI 驱动的 .NET 应用程序更加一致和智能

作者&#xff1a;Catherine Wang 排版&#xff1a;Alan Wang Redis 是一种流行的内存数据存储&#xff0c;可用于解决构建和扩展智能应用程序的关键挑战。在本文中&#xff0c;你将了解如何使用 Redis 的 Azure 缓存来提高使用 Azure OpenAI 的应用程序的效率。 Redis 的 Azur…

asp.net core 多个授权策略选择单个策略

首先假设我们依据官方示例有这样一个自定义的授权handlerpublic class FunAuthorizeAttribute : AuthorizeAttribute, IAuthorizationRequirement,IAuthorizationRequirementData{public FunAuthorizeAttribute() : this(null, true) { }public FunAuthorizeAttribute(string f…

Jenkins - macOS 上安装

文章目录 关于 JenkinsmacOS 上安装 Jenkins方式一&#xff1a;brew方式二&#xff1a;tomcat Jenkins war 关于 Jenkins 官网上下载Jenkins并将其安装到持续集成服务器 https://jenkins.io/download/ macOS 上安装 Jenkins 现在本 macOS 上测试 https://www.jenkins.io/do…

“好记性“和”烂笔头“的密码管理还安全吗?

近日,Bitwarden公司对来自美国、英国、澳大利亚、法国、德国和日本共2400名用户进行了调查,以研究当前用户密码的使用习惯。 调查发现,全球用户普遍缺乏对密码管理安全最佳实践的了解,继续采用高风险的密码管理方法,这导致了大量安全漏洞和数据泄露事件。 调查的重点发现如…

内网渗透-防火墙上线方案

windows防火墙默认规则为入站阻止,出站允许。 场景一:SQL服务器配置了防火墙 在单向防火墙中,攻击机可以使用正向,也可以使用反向上线web服务器,SQL服务器使用反向上线 场景二:WEB服务器配置了防火墙 在此场景中,攻击机需要使用反向来上线WEB服务器,SQL服务器使用正向上…

WEB攻防-.NET特性常见漏洞

目录 前置知识&#xff1a; DLL文件 .NET和DLL文件 C#和DLL文件 关系总结 .NET 配置调试-信息泄露 .NET 源码反编译-DLL 反编译与未授权访问 编译DLL文件 反编译DLL文件 注意事项 案例&#xff1a; 验证代码文件有没有可以绕过&#xff08;Cookie&Session&…

39、BlackRose(VulnHub)

BlackRose 一、nmap二、web渗透 随便看看注册进去 账号:xxxxxx 密码:xxxxxx目录爆破 有很多特殊的目录,不过访问后都重定向了burpsuite改包进admin 查看xxxxxx用户数据包 抓一些xxxxxx用户的一些记录包,看看有什么可用的 signature=&command=id&indexcsrf=3cb58993…

软件测试笔记_习题_面经

软件测试------按测试阶段划分有几个阶段? 单元测试、集成测试、系统测试、验收测试 软件测试------按是否查看源代码划分有几种测试方法? 黑盒、白盒、灰盒 软件测试------按是否运行划分有几种测试方法? 静态测试、动态测试 软件测试------按是否自动化划分有几种测试方…