react-router-dom路由简介
现代的前端页面大多是SPA(单页面应用程序), 也就是只有一个HTML页面的程序,这样用户体验好,服务器压力小,所以更受欢迎。路由是使用单页面来管理原来多页面的功能。
路由的功能:从一个页面,跳转到另一个页面。
在React中,路由是一套映射规则,是URL路径与组件的对应关系。
使用React路由,就是配置路径和组件的对应关系。
React的一切都是组件,可以像思考组件一样看待路由。
 
react-router-dom V5路由的基本使用
//1.安装库
npm i react-router-dom
//2.<Router>在根组件上包裹所有内容组件
<Router>
//3.<Link点击跳转到目标组件页面
<Link to="/first">页面一</Link>定义一个跳转链接
//4.<Routes>包裹具体的路由定义
<Routes>
<Route path="/first" element={<First/>}/>
</Routes>
import React from "react";
import {BrowserRouter as Router, Route, Link, Routes} from "react-router-dom" // import {HashRouter as Router, Route, Link, Routes} from "react-router-dom" const First = () => {
return (
<p>这是First组件页面</p>
)
} class RouterApp extends React.Component{
render() {
return (
<Router>
<div>
路由主页
<Link to="/first">页面一</Link>
<Routes>
<Route path="/first" element={<First/>}/>
</Routes>
</div>
</Router>
);
}
}

设置默认路由

一进入这个页面,就展示这个组件,通过将路径设置成"/"来实现。
<Route path={"/"} element={<Login/>}/>
class RouterApp extends React.Component{
render() {
return (
<Router>
<div>
路由主页
<Link to="/first">页面一</Link>
<Routes>
<Route path="/first" element={<First/>}/>
<Route path={"/"} element={<Login/>}/>
</Routes>
</div>
</Router>
);
}
}
常用组件介绍
Router组件
包裹整个应用,在根组件上添加,一个React应用只添加一次。
Router有两种,HashRouter和BrowserRouter
HashRouter使用URL的hash值实现 (http://localhost:3000/#/first
BrowserRouter使用H5的history API实现 (http://localhost:3000/first
HashRouter和BrowserRouter是无缝切换的
import {BrowserRouter as Router, Route, Link, Routes} from "react-router-dom"

// import {HashRouter as Router, Route, Link, Routes} from "react-router-dom"
Link组件
在页面中最终会转换成a标签。to中设置的值是浏览器上面的路由地址
location.pathname
'/first'
<Link to="/first">页面一</Link>
Route组件
指定路由展示组件的相关信息
path属性:路由规则
element属性:展示的组件
Route写在哪,路由渲染出来的组件就展示在哪。
<Routes>
<Route path="/first" element={<First/>}/>
</Routes>
路由的执行过程
1.当点击页面中的Link标签时,修改浏览器地址中的url
2.React路由监听地址栏url的变化
3.React遍历所有的Route组件,使用路由规则(path)与pathname进行匹配
4.当路由规则path能够匹配地址栏中的pathname时,就展示这个Route对应组件的内容。
import React from "react";
import {BrowserRouter as Router, Route, Link, Routes} from "react-router-dom" // import {HashRouter as Router, Route, Link, Routes} from "react-router-dom" const First = () => <p>这是First组件页面</p>
const Home = () => <h2>这是home主页</h2> class RouterApp extends React.Component{
render() {
return (
<Router>
<div> <Routes>
<Route path="/first" element={<First/>}/>
<Route path={"/home"} element={<Home/>}/>
</Routes>
路由主页
<br/>
<Link to="/first">页面一</Link>
<br/>
<Link to={"/home"}>Home主页</Link>
</div>
</Router>
);
}
}
编程式导航
编程式导航是使用js代码的形式实现的导航。
class Login extends React.Component{
handleClick = () => {
//history是在Routes选择route展示组件时,自动传入的。
//this.props.history.push("/manager") let history = useHistory()
history.push("/manager")
} render() {
return (
<div>
登录页面
<button onClick={this.handleClick}>点击登录</button>
</div>
);
}
} const Manager = (props) => {
let history = useHistory() const handleClick = () => {
history.go(-1)
} return (
<div>
管理后台
<button onClick={handleClick}>返回到登录页面</button>
</div>
)
}

匹配模式

模糊匹配-默认
React的路由匹配模式是模糊匹配的
匹配规则是:只要pathname以path开头,那么这个path对应的组件就会被匹配成功,就会展示出来。直白说,只要跳转的路由页面的路由比较长/login/a/b, 那么这个对应组件的父级,祖父级组件都能匹配到,并展示出来。如:/, /login, /login/a, /login/a/b。
子级组件展示了,它的上级组件直到根组件都会展示出来。
 
好像新版本v6这个匹配规则无效了
精确匹配
只有当pathname和path完全一样时,才会展示。
在Route标签中加exact进行修饰
<Route exact path={"/"} element={<Login/>}/>

版本变迁

useHistory使用方式变化:
react-router-dom v4 可以使 withRouter (函数组件里可以用这个方法), class组件里可以直接  this.props.history.push
react-router-dom v5 是使用 useHistory 
react-router-dom v6开始 useNavigate取代了原先版本中的useHistory 
 
方法使用对比
useHistory用法
import { useHistory } from "react-router-dom"; //引入 //使用:
// history.push({path:"/home"}); 也可以是对象 还可以传值 params,state,search 都能传 。
const history = useHistory();
history.push("/home"); useNavigate用法
import { useNavigate } from "react-router-dom"; const navigate = useNavigate();
navigate.push("/home");
 
 
 
 
 
 

路由react-router-dom的使用的更多相关文章

  1. react router 4.0以上的路由应用

    thead>tr>th{padding:8px;line-height:1.4285714;border-top:1px solid #ddd}.table>thead>tr& ...

  2. react router @4 和 vue路由 详解(七)react路由守卫

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 12.react路由守卫? a.在之前的版本中,React Router 也提供了类似的 ...

  3. react router @4 和 vue路由 详解(全)

    react router @4 和 vue路由 本文大纲: 1.vue路由基础和使用 2.react-router @4用法 3.什么是包容性路由?什么是排他性路由? 4.react路由有两个重要的属 ...

  4. React Router 4.0 实现路由守卫

    在使用 Vue 或者 Angular 的时候,框架提供了路由守卫功能,用来在进入某个路有前进行一些校验工作,如果校验失败,就跳转到 404 或者登陆页面,比如 Vue 中的 beforeEnter 函 ...

  5. 从 React Router 谈谈路由的那些事

    React Router 是专为 React 设计的路由解决方案,在使用 React 来开发 SPA (单页应用)项目时,都会需要路由功能,而 React Router 应该是目前使用率最高的. Re ...

  6. React初识整理(四)--React Router(路由)

    官网:https://reacttraining.com/react-router 后端路由:主要做路径和方法的匹配,从而从后台获取相应的数据 前端路由:用于路径和组件的匹配,从而实现组件的切换. 如 ...

  7. < react router>: (路由)

    < react router> (路由): 思维导图: Atrial   文件夹下的index.js 文件内容: import React, { Component } from 'rea ...

  8. react router路由传参

    今天,我们要讨论的是react router中Link传值的三种表现形式.分别为通过通配符传参.query传参和state传参. ps:进入正题前,先说明一下,以下的所有内容都是在react-rout ...

  9. [转] React Router 使用教程

    PS:react-route就是一个决定生成什么父子关系的组件,一般和layout结合起来,保证layout不行,内部的子html进行跳转 你会发现,它不是一个库,也不是一个框架,而是一个庞大的体系. ...

  10. 关于react router 4 的小实践

    详细代码栗子:https://github.com/wayaha/react-dom-CY clone然后 npm install npm start 分割线 1.这个项目使用create-react ...

随机推荐

  1. Windows 端使用 C++ 服务操作类

    #pragma once #include <windows.h> #include <string> // #include <iostream> class S ...

  2. 2016年第七届 蓝桥杯B组C/C++ 决赛题解

    1.一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的面前是两个按钮,分别写着"F"和"B". 小明突然记起来,这 ...

  3. Dubbo 泛化调用在vivo统一配置系统的应用

    作者:vivo 互联网服务器团队- Wang Fei.LinYupan Dubbo泛化调用特性可以在不依赖服务接口API包的场景中发起远程调用, 这种特性特别适合框架集成和网关类应用开发. 本文结合在 ...

  4. MySQL 的 crash-safe 原理解析

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/5i9wmJs4_Er7RaYfNnETyA作者:xieweipeng MySQL作为当下最流行 ...

  5. Java解析上传的zip文件--包含Excel解析与图片上传

    Java解析上传的zip文件--包含Excel解析与图片上传 前言:今天遇到一个需求:上传一个zip格式的压缩文件,该zip中包含人员信息的excel以及excel中每行对应的人的图片,现在需要将该z ...

  6. 【转载】内存基本概念-伙伴(Buddy)算法

    简介 ​ 在Linux系统中,内存的分配与回收速率直接影响系统的存取效率.当内核频繁请求和释放不同大小的一组连续页框时,会导致许多外部空闲碎片,造成空间的浪费.使用伙伴算法可以有效地缓解该问题.伙伴关 ...

  7. 小白学标准库之 flag

    Go 提供了解析命令行参数的 flag 包,本文旨在介绍 flag 的使用及内部实现等. 1. flag 包使用及实现 type PropertyOfPod struct { Namespace *s ...

  8. 使用ensp搭建路由拓扑,并使用BGP协议实现网络互通实操

    转载请注明出处: 1.使用ENSP搭建的网络拓扑如下: 数据准备: 设备名称 接口 IP地址 DeviceA Loopback 0 1.1.1.1/32 Eth 1/0/0 172.16.0.1/16 ...

  9. spring boot 中WebMvcConfigurer相关使用总结

    本文为博主原创,未经允许不得转载: WebMvcConfigurer 为spring boot中的一个接口,用来配置web相关的属性或工具插件,比如消息转换器,拦截器,视图处理器,跨域设置等等. 在S ...

  10. Jquery - 获取所有子节点 ( 并删除 )

    1,获取所有子节点   $(".parent").find('.child') 2,获取所有子节点,通过上层 div 的类名 , 获取上层 div 节点 $(".pare ...