react 路由的使用

news2024/12/23 20:18:23

react-router-dom 专注于web网页开发

下载依赖,这里使用的版本是5  npm install react-router-dom@5

1.路由的基本使用,点击左侧菜单进行高亮(进行高亮要使用NavLink,使用了NavLink,会根据 activeClassName="active"找到active的class类的样式):

准备好两个组件:Home和About

然后再App.js中写入一下代码

import React, { Component } from 'react'
// 引入路由  Route:路由
import {Link,Route,NavLink} from 'react-router-dom'
import Home from './components/Home';
import About from './components/About';
export default class App extends Component {
  
  render() {
    return (
      <div>
        {/* 编写路由链接 */}
          <Link to="/home">home页面</Link>
          <Link to="/about">about页面</Link>
           //下面是高亮的路由
            <NavLink  activeClassName="active" to="/home">home页面</NavLink>
              <NavLink  activeClassName="active"  to="/about">about页面</NavLink>
            {/* 注册路由 */}
          <Route path="/home" component={Home}/>
          <Route path="/about" component={About}/>
      </div>
    )
  }
}

需要再App.js外面抱一个路由模式,是BrowserRouter还是HashRouter模式,在index.js中写入以下代码

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {BrowserRouter} from 'react-router-dom'
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <BrowserRouter>//主要是这个模式
    <App />
    </BrowserRouter>
  </React.StrictMode>
);
reportWebVitals();

2.封装NavLink  由于使用NavLink样式都长一样太多导致页面不好看,就把相同的部分封装

新建一个一般组件MyNavLink

import React, { Component } from 'react'
import {NavLink} from 'react-router-dom'

export default class MyNavLink extends Component {
  render() {
    console.log(this)
    //下面props中children是react自己生成的,因为是标签体里面的内容
    

    return (
      <div>
        <NavLink activeClassName="active" {...this.props} />
      </div>
    )
  }
}

app.jsx使用

import React, { Component } from 'react'
// 引入路由   BrowserRouter--浏览器router,Route:路由
import {Route} from 'react-router-dom'
import Home from './pages/Home';
import About from './pages/About';
import MyNavLink  from './components/MyNavLink';
import './App.css'
export default class App extends Component {
  
  render() {
    return (
      <div>
        {/* 编写路由链接    下面标签体里面的home和about,react回自动使用props传给子组件*/}
        <MyNavLink to="/home" >home</MyNavLink>
        <MyNavLink to="/about">about</MyNavLink>

            {/* 注册路由 */}
          <Route path="/home" component={Home}/>
          <Route path="/about" component={About}/>
        

          
      </div>
    )
  }
}

3.提升路由工作效率,避免一个路径对应多个组件

引入一个Switch

import React, { Component } from 'react'
// 引入路由   BrowserRouter--浏览器router,Route:路由
import {Route,Switch} from 'react-router-dom'
import Home from './pages/Home';
import About from './pages/About';
import MyNavLink  from './components/MyNavLink';
import './App.css'
export default class App extends Component {
  
  render() {
    return (
      <div>
        {/* 编写路由链接    下面标签体里面的home和about,react回自动使用props传给子组件*/}
        <MyNavLink to="/home" >home</MyNavLink>
        <MyNavLink to="/about">about</MyNavLink>

            {/* 注册路由 */}
            <Switch>
                  <Route path="/home" component={Home}/>
                  <Route path="/about" component={About}/>
            </Switch>

          
      </div>
    )
  }
}

4.实现页面重定向,根据Redirect(页面初始显示的内容)

import React, { Component } from 'react'
// 引入路由   BrowserRouter--浏览器router,Route:路由
import {Route,Redirect} from 'react-router-dom'
import Home from './pages/Home';
import About from './pages/About';
import MyNavLink  from './components/MyNavLink';
import './App.css'
export default class App extends Component {
  
  render() {
    return (
      <div>
        {/* 编写路由链接    下面标签体里面的home和about,react回自动使用props传给子组件*/}
        <MyNavLink to="/home" >home</MyNavLink>
        <MyNavLink to="/about">about</MyNavLink>

            {/* 注册路由 */}
          <Route path="/home" component={Home}/>
          <Route path="/about" component={About}/>
        <Redirect from="/" to="/home"></Redirect>

          
      </div>
    )
  }
}

5.嵌套路由(就是二级路由)

如果左边有一级菜单,右边有内容区还有一个菜单。就可以在内容区配置二级路由。

例如:右侧内容区路径为home,右侧 导航就叫/home/news

6.路由组件传递参数

6.1传递params

通过路由组件link传递id

遍历一个数组,通过点击数组进行跳转页面

{

        list.map((item)=>{

                return(

                        <li key={item.id}>

                                       //to={`/home/message/detail/${item.id}`}这样就能把id传给组件

                                <Link to={`/home/message/detail/${item.id}/${obj.title}`}>{item.title}</Link>

                        </li>

                )

        })

}

//Detail声明接收参数 (/:id)

<Router path="/home/message/detail/:id/:title" component={Detail}></Route>

//Detail组件直接从props接收就可以了(props.match.params里面)

6.2传递search

需要引入querystring

import   qs from 'querystring'

通过qs.stringfy(值)   得到的是 id=01&title=11

通过qs.parse()得到的是{ id:01,title:11}

6.2传递state参数

7.编程式路由导航

通过点击事件进行跳转

<button onClick={this.chaneRoute} >点我</button>

chaneRoute=()=》{

        //可以进行push前进到那个页面

        this.props.history.push(具体的页面)

        //可以通过replace后退到那个页面

        this.props.history.replace(具体的页面)

}

8.让一般组件使用路由组件的history(一些api)

可以通过withRouter,可以加工一般组件,让一般组件具备路由组件特有的API

例如:头部组件是一个一般组件,想使用路由组件身上的api,需要在一般组件引入

import {widthRouter} from  'react-router-dom';

class Header extends Component {

        render(){

        console.log(this)

                return()

        }

}

export default withRouter(Header)

9.BrowserRouter和HashRouter的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue基础语法的进阶,事件处理器,自定义组件及组件通信

目录 一、事件处理器 1. 概述 2. 实例 二、语法整合 1. 作用 2. 实例 三、自定义组件 1. 概述 2. 实例 四、组件通信 ( 1 ) 讲述 ( 2 ) 父传子 ( 3 ) 子传父 学习后的收获 一、事件处理器 1. 概述 在Vue中&#xff0c;事件处理器是用来处理DOM事件的方法。它…

ubuntu20.04 安装 pyconcorde

这个包似乎对网络环境要求挺高的&#xff0c;我们直接弄个 射线A型号 的飞机 直接使用 pip install pyconcorde 安装&#xff0c;发现在使用里面的包时会报奇怪的错误&#xff0c;于是决定寻找 github 上的 pyconcorde 源码&#xff0c;看文档进行安装 github 地址&#xff1…

msvcp140.dll重新安装的解决方法是什么?(最新方法)

msvcp140.dll 是 Microsoft Visual C Redistributable 的一个动态链接库文件&#xff0c;它包含了 C 运行时库的一些函数和类&#xff0c;对于许多应用程序和游戏来说都是必需的。如果您的系统中缺失了这个文件&#xff0c;可能会导致程序无法正常运行。下面我们将分享修复 msv…

【C++笔记】C++ list类模拟实现

【C笔记】C list类模拟实现 一、初始化和各种构造1.1、准备工作1.2、各种构造和析构 二、插入和删除2.1、插入2.2、删除 三、迭代器3.1、正向迭代器3.2、反向迭代器3.3、提供迭代器位置 四、其他一些接口4.1、链表的长度和判空4.2、返回链表的头尾结点 一、初始化和各种构造 C…

面试题 17.08. 马戏团人塔

题目链接 面试题 17.08. 马戏团人塔 mid 题目描述 有个马戏团正在设计叠罗汉的表演节目&#xff0c;一个人要站在另一人的肩膀上。出于实际和美观的考虑&#xff0c;在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重&#xff0c;请编写代码计算叠罗汉最多…

Microsoft 网络监控

随着网络的发展和变得越来越复杂&#xff0c;公司比以往任何时候都更需要监控其网络基础设施&#xff0c;因为即使是轻微的系统中断也可能导致重大损失。网络监控工具提供实时数据和网络状态的图形概述。这使您能够准确地了解正在发生的事情&#xff0c;以便您知道需要更改的位…

进程间的通信方式

文章目录 1.简单介绍2.管道2.1管道的基础概念**管道读写规则**:**管道特点** 2.2匿名管道匿名管道父子进程间通信的经典案例&#xff1a; 2.3命名管道基本概念:命名管道的创建&#xff1a;命名管道的打开规则&#xff1a;匿名管道与普通管道的区别**例子&#xff1a;用命名管道…

基于SpringBoot+Vue的宠物领养饲养交流管理平台设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…

HTML实现移动端布局与页面自适应

我们所说的布局方式&#xff0c;这里我们通常指的是width和height在不同页面情况下面的改变。 常见页面的布局方式有 静态布局 &#xff08;px布局&#xff0c;就是固定其高宽&#xff0c;不论页面怎样放大缩小&#xff0c;其占领的依旧是&#xff0c;使用px固定了的高宽&…

这种方法可以解决开发中的重复“造轮子”

一、前言 开发中&#xff0c;一直听到有人讨论是否需要重复造轮子&#xff0c;我觉得有能力的人&#xff0c;轮子得造。但是往往开发周期短&#xff0c;用轮子所节省的时间去更好的理解业务&#xff0c;应用到业务中&#xff0c;也能清晰发现轮子的利弊&#xff0c;一定意义上解…

PyTorch深度学习(三)【Logistic Regression、处理多维特征的输入】

Logistic Regression 这个名字叫做回归&#xff0c;做的是分类。 线性和logistic的模型&#xff1a; 使用的损失函数&#xff1a;二分类交叉熵 &#xff08;这个也叫做BCELoss&#xff09; logistic要做的事&#xff1a; 代码&#xff1a; import torch# import torch.nn.fun…

Java基于SpringBoot的校园疫情防控系统

文章目录 第一章2.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1系统功能模块5.2后台功能模块5.2.1管理员功能 源码咨询 第一章 springboot校园疫情防控系统演示录像2022 一个好的系统能将校园疫情防控的管理…

VB求平均值

VB求平均值 Private Function pj(x() As Integer) As SingleDim m%, n%, i%, s%m LBound(x): n UBound(x)For i m To ns s x(i)Next ipj s / (n - m 1) End Function Private Sub Command1_Click()Dim a%(1 To 10), i%, aver!For i 1 To 10a(i) Int(Rnd() * 10) 随机…

IMX6ULL移植篇-Linux内核编译

一. Linux内核 Linux 官网为 https://www.kernel.org &#xff0c;所以你想获取最新的 Linux 版本就可以在这个网站上下载。 Linux-4.x 版本 的 Linux 和 5.x 版本没有本质上的区别&#xff0c; 5.x 更多的是加入了一些新的平台、新的外设驱动而已。 NXP 会从网址 …

提升科研可复现性:和鲸聚焦 AI for Science 全生命周期管理

今年三月&#xff0c;国家科技部会同自然科学基金委正式启动“人工智能驱动的科学研究&#xff08;AI for Science&#xff09;”专项部署工作。数据驱动的科学研究长期以来面临诸多困境&#xff0c;针对传统科研工作流中过度依赖人类专家经验与体力的局限性&#xff0c;AI4S 旨…

优化软件系统,解决死锁问题,提升稳定性与性能 redis排队下单

项目背景&#xff1a; 随着用户数量的不断增加&#xff0c;我们的速卖通小管家软件系统面临了一个日益严重的问题&#xff1a;在从存储区提供程序的数据读取器中进行读取时&#xff0c;频繁出现错误。系统报告了一个内部异常: 异常信息如下&#xff1a; 从存储区提供程序的数…

nvme各模块间的关系总结

目录&#xff1a;driver/host/nvme/makefile # SPDX-License-Identifier: GPL-2.0 ccflags-y -I$(src)obj-$(CONFIG_NVME_CORE) nvme-core.o obj-$(CONFIG_BLK_DEV_NVME) nvme.o obj-$(CONFIG_NVME_FABRICS) nvme-fabrics.o obj-$(CONFIG_NVME_RDMA) nvme-rdma.…

02、Servlet核心技术(下)

目录 1 ServletJDBC应用&#xff08;重点&#xff09; 2 重定向和转发&#xff08;重点&#xff09; 2.1 重定向的概述 2.2 转发的概述 3 Servlet线程安全&#xff08;重点&#xff09; 4 状态管理&#xff08;重点 &#xff09; 5 Cookie技术&#xff08;重点&#xf…

26 环形链表II

环形链表 II 题解1 哈希表题解2 双指针 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表…

pgzrun 拼图游戏制作过程详解(10)

10. 拼图游戏继续升级——多关卡拼图 初始化列表Photos用来储存拼图文件名&#xff0c;Photo_ID用来统计当下是第几张拼图&#xff0c;Squares储存当下拼图的24张小拼图的文件名&#xff0c;Gird储存当下窗口上显示的24个小拼图及坐标。 Photos["girl_","boy_…