【react全家桶】react路由

简介: 【react全家桶】react路由

react路由

5.1. 路由的简介

单页Web应用(single page web application,SPA)。整个应用只有一个完整的页面。击页面中的链接不会刷新页面,只会做页面的局部更新。数据都需要通过ajax请求获取,

并在前端异步展现,且是单页面、多组件

  1. 一个路由就是一个映射关系(key:value)
  2. key为路径, value可能是function或component


路由分类

  1. 后端路由:

(1) value是function, 用来处理客户端提交的请求。

(2)注册路由: router.get(path, function(req, res))

(3)当node接收到一个请求时, 根据请求路径找到匹配的路由, 调用路由中的函数来处理请求, 返回响应数据

  1. 前端路由:

(1)浏览器端路由,value是component,用于展示页面内容。

(2)注册路由:

(3)工作过程:当浏览器的path变为/test时, 当前路由组件就会变为Test组件

(4)前端路由也要靠BOM 上的 history


5.2 路由的基本使用
  1. 明确好界面中的导航区、展示区
  2. 导航区的a标签改为Link标签
    Demo
  3. 展示区写Route标签进行路径的匹配(在呈现路由组件内容的位置注册路由)
<Routes>
  <Route path="/about" element={<About/>}/>
  <Route path="/home" element={<Home/>}/>
</Routes>


5.3 路由组件与一般组件
  1. 写法不同:
    一般组件:
    路由组件:
  2. 存放位置不同:
    一般组件:components
    路由组件:pages
  3. 接收到的props不同:
    一般组件:写组件标签时传递了什么,就能收到什么
    路由组件:接收到三个固定的属性


5.4 NavLink及其封装
  • NavLink可以实现路由链接的高亮,通过activeClassName指定样式名
  • 标签体内容是一个特殊的标签属性,可以通过this.props.children获取。因此以下两段代码是等价的。

5.5 Switch
  1. 注册路由时用Switch包裹所有路由
  2. 通常情况下,path和component是一一对应的关系。
  3. Switch可以提高路由匹配效率(单一匹配)。


5.6 路由的模糊匹配与严格匹配
  1. 默认使用的是模糊匹配(【输入的路径】必须包含要【匹配的路径】,且顺序要一致)
<MyNavLink to="/about/a/b">Home</MyNavLink>  //模糊匹配
<Route path="/about" component={About}/>
  1. 开启严格匹配:

// exact={true}可以简写为exact

  1. 严格匹配不要随便开启,需要再开,有些时候开启会导致无法继续匹配二级路由


5.7 Redirect重定向

一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由


5.8 向路由组件传递参数

state参数

  1. 路由链接(携带参数):

详情

  1. 注册路由(无需声明,正常注册即可):
  2. 接收参数:this.props.location.state
    备注:刷新也可以保留住参数,但回退不行,无法回退到上一个·同级路由


5.9 编程式路由导航

借助this.prosp.history对象上的API对操作路由跳转、前进、后退,而不用路由的和,但还是要注册路由

  this.prosp.history.push()

  this.prosp.history.replace()

  this.prosp.history.goBack()

  this.prosp.history.goForward()

  this.prosp.history.go()


5.10withRouter的使用
  1. withRouter可以加工一般组件,让一般组件具备路由组件所特有的API
  2. withRouter的返回值是一个新组件。
  3. 在一般组件中要用到路由组件的props属性时引入。
import {withRouter} from 'react-router-dom'
//需要暴露
export default withRouter(Header)


5.12 BrowserRouter与HashRouter的区别
  • 底层原理不一样: BrowserRouter使用的是H5的history API,不兼容IE9及以下版本。
    HashRouter使用的是URL的哈希值。
  • path表现形式不一样 BrowserRouter的路径中没有#,例如:localhost:3000/demo/test HashRouter的路径包含#,例如:localhost:3000/#/demo/test
  • 刷新后对路由state参数的影响
  • 1)BrowserRouter没有任何影响,因为state保存在history对象中。
  • 2)HashRouter刷新后会导致路由state参数的丢失

目录
相关文章
|
2月前
|
前端开发 JavaScript
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
本文介绍了在React项目中实现路由懒加载的方法,使用React提供的`lazy`和`Suspense`来优化项目首次加载的速度。通过将路由组件改为懒加载的方式,可以显著减少初始包的大小,从而加快首次加载速度。文章还展示了如何使用`Suspense`组件包裹`Switch`来实现懒加载过程中的fallback效果,并提供了使用前后的加载时间对比,说明了懒加载对性能的提升作用。
184 2
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
|
18天前
|
前端开发 API UED
React 路由守卫 Guarded Routes
【10月更文挑战第26天】本文介绍了 React 中的路由守卫(Guarded Routes),使用 `react-router-dom` 实现权限验证、登录验证和数据预加载等场景。通过创建 `AuthContext` 管理认证状态,实现 `PrivateRoute` 组件进行路由保护,并在 `App.js` 中使用。文章还讨论了常见问题和易错点,提供了处理异步操作的示例,帮助开发者提升应用的安全性和用户体验。
35 1
|
3月前
|
移动开发 资源调度 前端开发
介绍React路由模式
【8月更文挑战第10天】介绍React路由模式
57 12
|
21天前
|
前端开发 安全 网络安全
React——路由Route
React——路由Route
31 2
React——路由Route
|
1月前
|
资源调度 前端开发 测试技术
React Router 路由管理
【10月更文挑战第10天】本文介绍了 React Router,一个在 React 应用中管理路由的强大工具。内容涵盖基本概念、安装与使用方法、常见问题及解决方案,如路由嵌套、动态路由和路由守卫等,并提供代码示例。通过学习本文,开发者可以更高效地使用 React Router,提升应用的导航体验和安全性。
213 19
|
1月前
|
前端开发 网络架构
React 路由
10月更文挑战第11天
33 2
|
1月前
|
前端开发 JavaScript 网络架构
实现动态路由与状态管理的SPA——使用React Router与Redux
【10月更文挑战第1天】实现动态路由与状态管理的SPA——使用React Router与Redux
33 1
|
2月前
|
前端开发 Python
React技术栈-React路由插件之自定义组件标签
关于React技术栈中React路由插件自定义组件标签的教程。
54 4
React技术栈-React路由插件之自定义组件标签
|
2月前
|
移动开发 前端开发 应用服务中间件
React两种路由模式的实现原理
React两种路由模式的实现原理
85 3
|
2月前
|
前端开发 程序员 API
React技术栈-React路由插件之react-router的基本使用
这篇博客介绍了React路由插件react-router的基本使用,包括其概念、API、以及如何通过实战案例在React应用中实现SPA(单页Web应用)的路由管理。
70 9