路由react-router-dom的使用

dom,react,router,使用 · 浏览次数 : 267

小编点评

**React路由简介** React路由是 React 中用于管理应用程序跳转的 API。它允许您将 URL 路由与组件相关联,以便在用户点击链接时跳转到特定的页面。 **基本用法** 1. **导入** `BrowserRouter` 或 `Router`组件。 2. **包裹所有内容组件** 使用 `BrowserRouter`。 3. **定义路由规则** 使用 `Route` 组件定义路由。 4. **指定路由显示组件** 使用 `element` 属性指定组件。 5. **使用 `Link` 组件创建内部链接**,其中包含路由地址。 **示例** ```jsx import React from "react"; import { BrowserRouter as Router, Route, Link } from "react-router-dom"; const App = () => ( } /> } /> ); const First = () =>

Page 1

; const Home = () =>

Page 2

; export default App; ``` **匹配模式模糊匹配** v6 中的新版本支持模糊匹配,允许您匹配路径的一部分。例如,以下代码将匹配路径 `/home/a` 和 `/home/a/b`: ```jsx import React from "react"; import { BrowserRouter as Router, Route } from "react-router-dom"; const App = () => ( } /> ); const Home = () =>

Page 2

; export default App; ``` **其他提示** * 使用 `exact` 属性进行精确匹配。 * 使用 `history` 或 `Navigate` 对象进行页面导航。 * 考虑使用 `useNavigate` 或 `useHistory` 来简化路由操作。

正文

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这个匹配规则无效了
0
精确匹配
只有当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的使用相似的内容:

路由react-router-dom的使用

react-router-dom路由简介 现代的前端页面大多是SPA(单页面应用程序), 也就是只有一个HTML页面的程序,这样用户体验好,服务器压力小,所以更受欢迎。路由是使用单页面来管理原来多页面的功能。 路由的功能:从一个页面,跳转到另一个页面。 在React中,路由是一套映射规则,是URL路

React Router 6 快速上手

## 1.概述 1. React Router 以三个不同的包发布到 npm 上,它们分别为: 1. react-router: 路由的核心库,提供了很多的:组件、钩子。 2. **react-router-dom:** 包含react-router所有内容,并添加一些专门用于 DOM 的组件,例如

React跨路由组件动画

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:佳岚 回顾传统React动画 对于普通的 React 动画,我们大多使用官方推荐的 react-transition-group,其提供了四个基本组件 Tra

[react性能优化]--防止react-re-render: Why Suspense and how ?

近期内部项目基础项目依赖升级,之前使用的路由缓存不再适用,需要一个适配方案。而在此过程中react re-render算是困扰了笔者很久。后来通过多方资料查找使用了freeze解决了此问题。本文主要论述react re-render问题一般的解决方案和freeze在react内部的实现原理。reac

React 的 KeepAlive 探索

什么是 KeepAlive? 用过 Vue 的童鞋都知道 Vue 官方自带了 Keep-Alive 组件,它能够使组件在切换时仍能保留原有的状态信息,并且有专门的生命周期方便去做额外的处理。该组件在很多场景非常有用,比如: tabs 缓存页面 分步表单 路由缓存 我们先看看 Vue 中是如何使用的,

项目实战:在线报价采购系统(React +SpreadJS+Echarts)

小伙伴们对采购系统肯定不陌生,小到出差路费、部门物资采购;大到生产计划、原料成本预估都会涉及到该系统。 管理人员可以通过采购系统减少管理成本,说是管理利器毫不过分,对于采购的效率提升也有极大帮助。 但是对于大多数制造业企业而言,具有企业级整体视角的管理人才仍然难得,系统化的思考方式、解决复杂业务管理

antd 3.x升4.x踩坑之路~

我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 兼容性问题 第三方依赖兼容问题 React - 最低 v16.9,部分组件使用 hooks 重构 react升级相关文档 Less - 最低 v3.1.0,建议升级到

5分钟了解LangChain的路由链

路由链(RouterChain)是由LLM根据输入的Prompt去选择具体的某个链。路由链中一般会存在多个Prompt,Prompt结合LLM决定下一步选择哪个链。

内部网关协议RIP-路由选择协议

路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议,其相关标准文档为RFC1058。 一、RIP基本工作原理 RIP要求自治系统AS内的每一个路由器都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为“距离向量D

记一次Native memory leak排查过程

路由计算服务是路由系统的核心服务,负责运单路由计划的计算以及实操与计划的匹配。在运维过程中,发现在长期不重启的情况下,有TP99缓慢爬坡的现象。此外,在每周例行调度的试算过程中,能明显看到内存的上涨。