<React-Router>超全react路由知识点(跳转、传参、子路由、重定向等)

这篇具有很好参考价值的文章主要介绍了<React-Router>超全react路由知识点(跳转、传参、子路由、重定向等)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、路由环境配置

1.搭建一个项目名为boke(自定义),编辑文档语言为TypeScript的项目环境。

2.安装所有package.json中的依赖----安装包(注意要【cd 项目名】进入项目文件安装)

3.添加React-Router路由

4.文件、目录相关修改与搭建

二、路由的懒加载

 三、路由跳转

1.标签跳转(声明式跳转)---a标签、Link标签 

2.编程式跳转 ---useNavigate

 四、路由传参

1. url传参 ————直接使用navigate

2.state传参 (常用)

3.params传参

五、配置符" * "

六、路由嵌套

1.方法一

(1).在父路由后面增加" / * ",表示可以有子组件

(2).配置子路由选项

(3).将子路由文件导入父路由文件中

 2.方法二

3.注意事项

七、路由重定向

1.方法一

2.方法二

3.方法三

八、路由鉴权

方法一:组件传参

方法二:插槽


一、路由环境配置

1.搭建一个项目名为boke(自定义),编辑文档语言为TypeScript的项目环境。

create-react-App boke --template typescript

2.安装所有package.json中的依赖----安装包(注意要【cd 项目名】进入项目文件安装)

npm i

3.添加React-Router路由

(a)ts开发情况下,  下载模块"react-router-dom"和 "@types/react-router-dom"

npm i --save react-router-dom @types/react-router-dom

(b)js开发情况下,    只需下载模块"react-router-dom" 

扩展:

  • --save -dev:某些脚手架只在开发阶段起作用,项目打包的时候不会被打包,表示下载的这个包非项目依赖,缩写-D
  • --save则表示开发阶段需要,项目打包也被打包。(npm版本5.6以上,默认下载--save)缩写-S

注意本篇文章的编写按照一下版本号进行的

react点击跳转路由,react.js,javascript,前端

4.文件、目录相关修改与搭建

        将src文件目录下只留下文件App.tsx和index.tsx,自己设计建立路由文件夹router,网站页面文件夹views,新建文件home(首页),user(个人中心页),error(不输入网址错误时进入的页面)。

App.tsx:

react点击跳转路由,react.js,javascript,前端

index.tsx:

react点击跳转路由,react.js,javascript,前端

 配置路由文件(以下只写了一级路由)

react点击跳转路由,react.js,javascript,前端

 其中" / "表示端口号后面什么都没有输入或者只输入了" / "

其中 " / * "表示没有能匹配上的进入的页面

二、路由的懒加载

        我们如果像上面这么写全部页面都用import引入,项目打包的时候就会将这些网页代码全部都打包,极大浪费内存资源。我们可以使用路由的懒加载(用户输入该网址才会打包该文件)————>React,lazy()

        这里介绍几个标签<Suspense>占位组件,当懒加载组件还没有加载出来的时候,先用占位组件显示。里面有一个属性fallback,里面传进去的组件就是占位组件。有<Suspense>表示该组件懒加载出来的,决定是否懒加载出来的看是不是React.lazy().

react点击跳转路由,react.js,javascript,前端

 三、路由跳转

        路由跳转有标签跳转-声明式跳转,用ts、js程序实现跳转的是编程式跳转

1.标签跳转(声明式跳转)---a标签、Link标签 

react点击跳转路由,react.js,javascript,前端

跳转路径: “/user”是以斜杠开头,表示相对根路径,当前网址的根是3000端口,直接在3000端口后面写“/user”。

提问:a标签跳转和Link跳转有什么区别?

a标签作为一种网络连接,会重新请求网页,导致页面刷新,而Link标签只是用DOM操作将页面中的标签切换,通过网址来切换组件。

2.编程式跳转 ---useNavigate

useNavigate(路由框架自定义hook,非React官方提供)

react点击跳转路由,react.js,javascript,前端

 四、路由传参

        在说路由传参之前,先了解如何获取到当前路由信息

  //导入
  import {useNavigate, useLocation, useParams } from 'react-router-dom'
  
  let navigate = useNavigate()
  // /* 手写实现获取到url中?后的参数信息 */
  let localtion = useLocation()
  let params = useParams()
  console.log(localtion, params, "--------------");
  // //localtion路由信息对象
  // //params针对于state传参

localtion对象

react点击跳转路由,react.js,javascript,前端        

        路由传参在我们项目开发中经常会遇到,比如商品点进详情页,而不同商品的详情页-不同在于内容不一样,我们在发送网络请求获取到所点击商品的详情时,我们路由跳转的时候传参,再将参数发送给后端,后端判断返回数据给前端。      

        那么路由如何传参呢?我们模拟点击商品进入详情页,使用假数据

react点击跳转路由,react.js,javascript,前端

1. url传参 ————直接使用navigate

react点击跳转路由,react.js,javascript,前端

 跳转时,参数在url中,目标参数需要手动解析

  在这里再扩充一个小知识点,手写函数解析url的querystring,以下可以获取到url中”?"后的参数

  /* 手写实现获取到url中?后的参数信息 */
  let localtion = useLocation()
  let params = useParams()
  console.log(localtion, params, "--------------");
  //localtion路由信息对象
  //params针对于动态路由传参--params传参
  let queryobj:any={}
  localtion.search.split("?")[1].split("&").forEach(el=>{
    var arr=el.split("=")
    queryobj[arr[0]]=arr[1]
  })
  console.log(queryobj);

2.state传参 (常用)

state传参优点:state传入参数,用户通过点击商品进入详情页(两个页面有直接联系),会将state的数据存到缓存中,并不是像url传参拼接到url后面(注意此时是同一个浏览器页面实现的路由跳转,此缓存类似于sessionStorage,缓存数据不在不同的浏览器页面中共享),当这时候有其他人用此链接直接搜索时,不存在state参数数据。

react点击跳转路由,react.js,javascript,前端

 state传参获取到参数数据,直接取值 location.state

3.params传参

    /* 第三种 params传参(动态路由传参) */
    navigate("/user/0315")

        其中这第一个数据user表示路由,第二个数据0315表示参数,params传参也叫动态路由传参,参数放在网址中。放在passname中。

需要满足三个地方条件

(1)注册————":"冒号后面表示变量,该变量保存参数

react点击跳转路由,react.js,javascript,前端

(2)跳转——跳转格式跟注册格式对应

react点击跳转路由,react.js,javascript,前端

(3)接收需要params接收

react点击跳转路由,react.js,javascript,前端

五、配置符" * "

<Route path="/*" element={<组件/>}></Route>

" * "表示其他路由没有被匹配到,就会匹配”配置符“后的组件。(注意已经更改了,以前此符号表示写在此符号前面的路由没有被匹配到,就匹配此符号的组件,后面的路由不会接着被匹配。所以以前需要将"*"路由写在最后,而现在没有影响,放在哪都行)

六、路由嵌套

1.方法一

(1).在父路由后面增加" / * ",表示可以有子组件

react点击跳转路由,react.js,javascript,前端

(2).配置子路由选项

react点击跳转路由,react.js,javascript,前端

(3).将子路由文件导入父路由文件中

react点击跳转路由,react.js,javascript,前端

 2.方法二

        除了单独一个文件配置子路由之外,我们还可以直接在父路由组件文件中配置子路由,这样的好处就是方便管理。同样的父路由需要加上“/*”。

react点击跳转路由,react.js,javascript,前端

3.注意事项

  • 父路由后面必须加“/*”,因为你只有进入了父路由——父路由组件代码,你才有机会加载父路由文件中的子路由代码。
  • 只有在根路由中才会启用路由模式<Router>__BrowserRouter,整个网站只有一个。

七、路由重定向

1.方法一

react点击跳转路由,react.js,javascript,前端

2.方法二

react点击跳转路由,react.js,javascript,前端

3.方法三

react点击跳转路由,react.js,javascript,前端

八、路由鉴权

        利用路由重定向,可以增加判断条件实现路由鉴权,例如我们登录后会在浏览器缓存中缓存token,我们也通过浏览器缓存中是否含有token来判断当前是否有用户登录,在某些页面,如果没有登录则需要则需要跳到登录页面进行登录操作,

封装函数组件用来路由鉴权

方法一:组件传参

react点击跳转路由,react.js,javascript,前端

react点击跳转路由,react.js,javascript,前端

方法二:插槽

react点击跳转路由,react.js,javascript,前端

react点击跳转路由,react.js,javascript,前端文章来源地址https://www.toymoban.com/news/detail-680430.html

到了这里,关于<React-Router>超全react路由知识点(跳转、传参、子路由、重定向等)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • React-Router详解

    React-Router是一款用于构建单页面应用(SPA)中处理路由的JavaScript库。在现代的Web应用中,SPA已经成为了一种常见的应用架构模式,它允许在不刷新整个页面的情况下进行交互式的用户体验。而React-Router作为React生态系统中的路由管理工具,为开发者提供了一种简洁、灵活且强

    2024年02月08日
    浏览(28)
  • React-学习笔记(8—react-router@5 and @6)

    目录 1、react-router@5 1-1、在项目中安装路由 1-2、一个项目使用一个路由器来管理路由即可 1-3、 路由组件和一般组件的区别 1-4、使用 NavLink 1-5、封装 NavLink —— MyNavLink 1-6、使用 Switch 标签 1-7、BrowserRouter解决多级路径匹配样式丢失问题 1-8、路由的模糊匹配和严格匹配 1-9、路

    2024年02月12日
    浏览(32)
  • 创建react脚手架项目——demo(react18 + react-router 6)+ react项目打包部署

    全局安装 create-react-app 说明:不建议安装全局,建议使用 npx 命令安装,具体可参考官网,如下: 官网: https://zh-hans.legacy.reactjs.org/docs/create-a-new-react-app.html. 1.2.1 问题1——npm ERR! code ENOTFOUND(网络问题clashx) 问题描述,如下: 解决问题——方式1 如果使用了clashx,可能是它

    2024年02月07日
    浏览(51)
  • react-router5: 地址栏变化,页面没变

    今天在写 react-router demo 的时候,出现了一个问题,浏览器地址栏变了,但是页面没变 手动刷新一下就变了 解决办法:

    2023年04月09日
    浏览(42)
  • React-Router 5.0 制作导航栏+页面参数传递

    使用 React 构建 SPA 应用(单页面应用),要想实现页面间的跳转,首先想到的就是使用路由。在 React 中,常用的有两个包可以实现这个需求,那就是 react-router 和 react-router-dom 。本文主要针对 react-router-dom 进行说明。 众所周知, JS 由 DOM BOM ECMAScript 组成, React-Router-Dom 使用 BOM 提供

    2024年02月08日
    浏览(32)
  • 一文了解 history 和 react-router 的实现原理

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:霜序 在前一篇文章中,我们详细的说了 react-router@3.x 升级到 @6.x 需要注意的问题以及变更的使用方式。 react-router 版本更新

    2024年02月12日
    浏览(29)
  • 超级实用!React-Router v6实现页面级按钮权限

    大家好,我是王天~ 今天咱们用 reac+reactRouter来实现页面级的按钮权限功能。这篇文章分三部分,实现思路、代码实现、踩坑记录。 嫌啰嗦的朋友,直接拖到第二章节看代码哦。 通常情况下,咱们为用户添加权限时,除了页面权限,还会细化到按钮级别,比如、新增、删除

    2024年02月08日
    浏览(30)
  • 【退役之重学前端】使用vite+vue3+vue-router,重构react+react-router前后端分离的商城后台管理系统

    前言: 对前端各个技术板块,HTML、CSS、JavaScript、ES6、vue家族,整体上能“摸其大概”。笔者计划重构一个基于react的商城后台管理系统。 —— 2024年2月16日 vue3 sass bootstrap ES7 前后端分离 分层架构 模块化开发 npm vite git

    2024年02月20日
    浏览(42)
  • React-路由 react-router-dom

    前端路由的功能:让用户从一个页面跳转到另一个页面。 前端路由是一套映射规则 ,在 React 中, 是 URL 路径与组件的对应关系 。 使用 React 路由简单来说就是配置 路径与组件(配对) 。 路由的本质: 一个路径 path 对应唯一的一个组件 component 当我们访问一个 path 自动把 p

    2024年02月02日
    浏览(32)
  • React 路由react-router-dom详解

    前面我们先了解一下 路由是什么? 路由分类有哪些?内置API有哪些 ? 可能有点枯燥,不喜欢看的直接跳过 ! 单页Web应用(single page web application,SPA)。 整个应用只有一个完整的页面。 点击页面中的链接不会刷新页面,只会做页面的局部更新。 数据都需要通过ajax请求获取

    2023年04月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包