react-router v6实现动态的title(react-router-dom v6)_react router v6 改 title-程序员宅基地

技术标签: react.js  create-react-app v5  前端  React  javascript  

前言

react-router-dom v6 默认不支持 title设置了,所以需要自己实现一下。
title截图

属性 描述
path 指定路由的路径,可以是字符串或字符串数组。当应用的URL与指定的路径匹配时,该路由将会被渲染。
element 指定要渲染的React组件或元素。
children 代表该路由下的子路由。可以是多个 Route 组件或者其他React元素。
caseSensitive 指定路径匹配是否区分大小写,默认为 false。
sensitive 指定路径匹配是否敏感于尾 / 字符,默认为 false。
index 指定是否当父级路径与当前URL完全匹配时,渲染该路由。
mergeParams 指定是否混合父级路由的参数到当前路由。
element 指定要渲染的React组件或元素。

react-router-dom v6 官方文档

实现过程

实现思路就是,一进入页面就 设置一下 title的值:
一进入页面,我们可以用 userEffect 或componentDidMounted动态设置title 可以用document.title = xx。

useEffect(()=>{
    
document.title="xxx"
},[])

但这样每个页面都写,很不优雅,也很繁琐。所以就需要在入口文件里封装一层。用一个组件包裹所有 的路由。
下面是在 create-react-app里的实现过程,其他也大差不差。

1.在路由配置里加上一个 title字段
在src下新建一个 routes.js,其他名也行。引入组件 定义一个routes并export。

// 导入你的页面组件  
import Home from './pages/home'; 
import FundDetail from './pages/detail';
const routes = [
  {
     path: "/", component: <Home/>,title:"首页"},

  {
     path: "/detail/:id", component: <FundDetail/>,title:"详情页"},
  // {
    
  //   path: "*", component:404
  // }

];

export default routes;
  1. App.js里 引入 routes.js,并循环创建 Route。
    必须 Routes 包裹 Route才行。我用的是hostory模式,你可以改成hash 把BrowserRouter 换成HashRouter 即可。

完整代码:

import React from "react";
import {
     BrowserRouter, Routes, Route, HashRouter } from "react-router-dom";
import routes from "./routes.js";

// 封装一层 专门负责显示页面标题

const App = () => {
    
  return (
    <BrowserRouter>
      <Routes>
        {
    routes.map((route) => (
          <Route
            key={
    route.path}
            path={
    route.path}
            element={
    route.component}
          
          />
        ))}

        {
    /* <Route path="/detail/:fundCode" element={<FundDetail />} /> */}
      </Routes>
    </BrowserRouter>
  );
};

export default App;

3.封装一个组件,专门改变 title,并且这个组件包裹所有组件。

// 封装一层 专门负责显示页面标题
const PageTitle = ({
      route}) => {
    
  const {
     title ,component} = route;
  document.title = title;
  return <>{
    component}</>;
};

然后 Route 里element改成:

element={
    <PageTitle route={
    route} />}

完整代码如下:

import React from "react";
import {
     BrowserRouter, Routes, Route, HashRouter } from "react-router-dom";
import routes from "./routes.js";
import "react-vant/es/styles";
// 封装一层 专门负责显示页面标题
const PageTitle = ({
      route}) => {
    
  const {
     title ,component} = route;
  document.title = title;
  return <>{
    component}</>;
};
const App = () => {
    
  return (
    <BrowserRouter>
      <Routes>
        {
    routes.map((route) => (
          <Route
            key={
    route.path}
            path={
    route.path}
            //element={route.component   }
            element={
    <PageTitle route={
    route} />}
          
          />
        ))}

        {
    /* <Route path="/detail/:fundCode" element={<FundDetail />} /> */}
      </Routes>
    </BrowserRouter>
  );
};

export default App;

路由模式和更多配置可以看:
react-router-dom v6 路由模式

补充:

获取路由参数:

import {
     useParams, useLocation } from "react-router-dom";
const {
    id}=useParams;

跳转路由编程式导航:

import {
     useNavigate } from "react-router-dom";
const navigate = useNavigate();
navigate(`/detail/${
      id}`);

也可以用 Link实现跳转路由。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44058725/article/details/134785462

智能推荐

Python-Tkinter图形化界面设计(详细教程 )_tkinter界面设计-程序员宅基地

文章浏览阅读5.7w次,点赞232次,收藏1.6k次。原文链接:https://www.jianshu.com/p/91844c5bca78声明:本篇文章为转载自https://www.jianshu.com/p/91844c5bca78,在原作者的基础上添加目录导航,旨在帮助大家以更高效率进行学习和开发。Python-Tkinter 图形化界面设计(详细教程)本文目录三、tkinter常见控件的特征属性3.1、文本输入和输出相关控件 一、图形化界面设计的基本理解 二、 窗体控件布局 2.1 根窗_tkinter界面设计

python networkx如何抽取子图_如何使用networkx从给定图中提取所有可能的诱导子图...-程序员宅基地

文章浏览阅读650次。对于在这里遇到同样问题但节点太多的人来说,这里对@Hooked的答案没有几个简单的改进(尽管我相信有更好的解决方案,正如@Hooked在评论中提到的那样,这只是一个快速的复制粘贴修复程序,适用于与我有相同原因并有缩放问题的人)1)igraph比networkx更具规模2)我们只能取一个节点的邻域来消除大多数不必要的组合例如,如果我们在较大的network中寻找motif(两个igraph对象)mo..._networkx motif

用OCC+VS+Qt创建并显示一个几何_occ opengldriver-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏25次。用OCC+VS+Qt创建并显示一个几何_occ opengldriver

Unity学习心得_unity课程总结心得-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏12次。Unity学习心得第一个项目 Roll A Ball1.基本模型和场景操作双击Cube,表示聚焦(在Scene场景中)或者按下 F键Persp:透视视图 (会产生近大远小) ISO:平行视野(不会产生近大远小的效果)2.世界坐标系和局部坐标系:世界坐标:以世界原点为中心的坐标 局部坐标:以父节点的中心_unity课程总结心得

maven的下载与安装教程(超详细)_maven安装-程序员宅基地

文章浏览阅读10w+次,点赞432次,收藏1.1k次。前言本篇文章是基于win10系统下载安装Maven的教程。一、 Maven介绍1. 什么是Maven​ Maven是一个跨平台的项目管理工具。作为Apache组织的一个颇为成功的开源项目,其主要服务于基于Java平台的项目创建,依赖管理和项目信息管理。maven是Apache的顶级项目,解释为“专家,内行”,它是一个项目管理的工具,maven自身是纯java开发的,可以使用maven对java项目进行构建、依赖管理。2. Maven的作用依赖管理依赖指的就是是 我们项目中需要使用的第三方_maven安装

研究生如何读文献 写论文 发文章 毕业论文_研究生一天读多少文献-程序员宅基地

文章浏览阅读2.1k次,点赞3次,收藏13次。研究生论文写作步骤1. 先看综述,后看论著。看综述搞清概念,看论著掌握方法。2. 早动手在师兄师姐离开之前学会关键技术。3. 多数文章看摘要,少数文章看全文。掌握了一点查全文的技巧,往往会以搞到全文为乐,以至于没有时间看文章的内容,更不屑于看摘要。真正有用的全文并不多,过分追求全文是浪费,不可走极端。当然只看摘要也是不对的。4. 集中时间看文献,看过总会遗忘。看文献的时间越分散_研究生一天读多少文献

随便推点

国外优秀的UI设计资源库_breezy wu ui-程序员宅基地

文章浏览阅读1k次。网站设计或者说UI设计对于Web上的运用是非常的关键,一个站做得好不好,能不能吸引人的眼球,设计占了不低的地位,但话又说回来,Web前端人 员又有多少人是设计专业毕业,具有这方面的能力呢?像我这样没有设计艺术细胞的页面仔,有时候为了一个效果苦于无法整出来,唯一的办法就是去搜索寻找相关 的设计资源网站,找到适合自己的UI效果。经过平时的积累与搜集,我整理了一个UI设计以及Web设计相关的资源网站,希_breezy wu ui

codeblocks调试问题--单步调试遇到breakpoint不停---不能单步调试--运行按钮是灰色但是没有dos窗口_codeblockdebug是灰的-程序员宅基地

文章浏览阅读5.3k次,点赞6次,收藏10次。今天晚上调试的时候可能不小心改了设置,还是其它原因,codeblocks突然遇到breakpoint不停了,然后百度了一下,大部分是说project创建的问题,感觉和自己的问题不同,我的问题是所有的project都不能单步调试。然后在seting-&gt;debug设置中找了一会都没有找到相应的设置,然后我就到debug中找到了debug-&gt;active debuggers-&gt;gdb/..._codeblockdebug是灰的

遇到svg 图标颜色无法修改怎么处理_svg cannot be converted to a uicolor-程序员宅基地

文章浏览阅读1.2k次。当项目里引入svg图标时,有的时候会遇到无法修改其颜色的问题首先在编辑其中打开svg文件在path中找到文件中fill属性,删除即可path中fill属性是无法修改的_svg cannot be converted to a uicolor

GSM劫持+短信嗅探 “半夜盗刷”-程序员宅基地

文章浏览阅读5.1k次,点赞2次,收藏21次。【PConline资讯】“一觉醒来,手机里多了上百条验证码,而账户被刷光还背上了贷款”——近期犯罪分子利用“GSM劫持+短信嗅探”的方式盗刷网友账户的事件成为网络热点。那么,该如何防范这种短信嗅探犯罪呢?安全专家指出,最简单的一招就是睡觉前关机,手机关机后就没有了信号,短信嗅探设备就无法获取到你的手机号。在主流App中,许多账户登录及资金操作都可以通过手机号码加短信验证码的方式实现,对于用...

Docker删除容器命令_docker delete-程序员宅基地

文章浏览阅读2.6w次,点赞4次,收藏25次。删除容器 之前要先docker stop 容器1. 删除指定容器docker rm -f <containerid>12. 删除未启动成功的容器docker rm $(docker ps -a|grep Created|awk '{print $1}')或者docker rm $(docker ps -qf status=created)1233. 删除退出状态的容器docker rm $(docker ps -a|grep Exited|awk '{print $1}_docker delete

乌龙(一)ntp对时_ntp对时 时区-程序员宅基地

文章浏览阅读107次。emmm…今天新搭了一套虚拟机(安装时一步过了 啥也没配置),操作时发现系统时间一直不对,于是安装了ntp跟阿里云等时钟源对过,发现一对时系统就变成了昨天,我把系统时间强制改为了现在,再次对时,时间又回退到昨天,最后发现时区选错了,选成了PST。解决方法cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime..._ntp对时 时区