二、【React-Router5】路由的基本使用

news2024/10/7 14:30:04

文章目录

  • 1、写在前面的总结
  • 2、效果图
  • 3、项目结构
  • 4、CODE
    • 4.1、index.js
    • 4.2、App.js
    • 4.3、About.jsx
    • 4.4、Home.jsx
  • 5、Result
  • 6、路由组件与一般组件
  • 7、Link 升级 NavLink
  • 8、封装NavLink
    • 8.1、MyNavLink.jsx
    • 8.2、修改上面4.2部分代码

1、写在前面的总结

  1. 明确好界面中的导航区、展示区
  2. 导航区的a标签改为Link标签
    1. <Link to="/xxxxx">Demo</Link>
  3. 展示区写Route标签进行路径的匹配
    1. <Route path='/xxxx' component={Demo}/>
  4. <App> 的最外侧包裹了一个<BrowserRouter><HashRouter>

2、效果图

在这里插入图片描述

3、项目结构

在这里插入图片描述

4、CODE

样式文件扔public/css下,在index.html里引入即可 <link rel="stylesheet" href="/css/bootstrap.css">,点击访问 bootstrap.css 样式文件

4.1、index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom'
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
);

4.2、App.js

import React, { Component } from 'react'
import { Link, Route } from 'react-router-dom'
import About from './components/About'
import Home from './components/Home'

export default class App extends Component {


  render() {
    return (
      <div>
        <div className="row">
          <div className="col-xs-offset-2 col-xs-8">
            <div className="page-header"><h1>React Router Demo</h1></div>
          </div>
        </div>
        <div className="row">
          <div className="col-xs-2 col-xs-offset-2">
            <div className="list-group" style={{ whiteSpace: 'pre-wrap' }}>
              <h3>{`原生html中靠<a>跳转不同页面`}</h3>
              {`<a className="list-group-item active" href="./about.html">About</a>\n<a className="list-group-item" href="./home.html">Home</a>`}
              <hr />
              <h3>在React中靠路由链接实现切换不同组件</h3>
              {`<BrowserRouter>\n\t<Link className="list-group-item" to="/about">About</Link>\n\t<Link className="list-group-item" to="/home">Home</Link>\n</BrowserRouter>`}
              <br />

              <Link className="list-group-item" to="/about">About</Link>
              <Link className="list-group-item" to="/home">Home</Link>
            </div>
          </div>
          <div className="col-xs-6">
            <div className="panel">
              <div className="panel-body" style={{ whiteSpace: 'pre-wrap' }}>
                {/* Route 注册路由 */}
                <h3>Route 注册路由</h3>
                {`<Route path='/about' component={About} />\n<Route path='/home' component={Home} />`}
                <br />
                <Route path='/about' component={About} />
                <Route path='/home' component={Home} />
              </div>
            </div>
          </div>
        </div>
      </div>
    );
  }
}

4.3、About.jsx

import React, { Component } from 'react'

export default class About extends Component {
    render() {
        return (
            <h3>我是About的内容</h3>
        )
    }
}

4.4、Home.jsx

import React, { Component } from 'react'

export default class Home extends Component {
    render() {
        return (
            <h3>我是Home的内容</h3>
        )
    }
}

5、Result

在这里插入图片描述

6、路由组件与一般组件

  1. 写法不同
    1. 一般组件:<Demo/>
    2. 路由组件:<Route path="/demo" component={Demo}/>
  2. 存放位置不同
    1. 一般组件:components
    2. 路由组件:pages
  3. 接收到的props不同
    1. 一般组件:写组件标签时传递了什么,就能收到什么
    2. 路由组件:接收到三个固定的属性(子属性只列举常用的)
      1. history
        1. go: ƒ go(n)
        2. goBack: ƒ goBack()
        3. goForward: ƒ goForward()
        4. push: ƒ push(path, state)
        5. replace: ƒ replace(path, state)
      2. location
        1. pathname: “/about”
        2. search: “”
        3. state: undefined
      3. match
        1. params: {}
        2. path: “/about”
        3. url: “/about”

7、Link 升级 NavLink

菜单栏选中添加高亮效果,使用 Link 标签的升级版 <NavLink>

NavLink 带有一个 activeClassName 属性,可为其赋值高亮时的样式类名,默认值是active,如果你的高亮样式类名正好是 active,那就可省略不写这个属性了

NavLink可以实现路由链接的高亮,通过activeClassName指定样式名,默认active

修改上面4.2部分代码如下:

import { NavLink, Route } from 'react-router-dom'

<NavLink className="list-group-item" to="/about">About</NavLink>
<NavLink className="list-group-item" to="/home">Home</NavLink>

8、封装NavLink

NavLink 身上很多属性是冗余的,如果你写了很多NavLink标签的话,此时我们可以选择防撞NavLink

这里封装成 MyNavLink 组件放到 src/components 下

8.1、MyNavLink.jsx

补充一个小知识点:标签体内容依然是特殊的标签属性,自动收集到 props.children 属性上

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

export default class MyNavLink extends Component {
    render() {
        return (
            // 标签体内容依然是特殊的标签属性,自动收集到 props.children 属性上
            // <NavLink className="list-group-item" {...this.props}>{this.props.children}</NavLink>

            // 很明显,既然 children 是 props 默认可接收的属性,那如下那般写法岂不是更简洁了~
            <NavLink className="list-group-item" {...this.props} />
        )
    }
}

8.2、修改上面4.2部分代码

import { Route } from 'react-router-dom'
import { MyNavLink } from './cmponents/MyNavLink'

<MyNavLink to="/about">About</MyNavLink>
<MyNavLink to="/home">Home</MyNavLink>


推荐学习参考视频:尚硅谷React教程-P77-路由的基本使用

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

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

相关文章

火山引擎数智平台:CDP产品要能与多方联动

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 CDP&#xff08;Customer Data Platform&#xff0c;客户数据平台&#xff09;市场将迎来新一轮的高速增长。 国际数据公司&#xff08;以下简称“IDC”&#xff0…

[附源码]Python计算机毕业设计SSM流浪猫狗救助站(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

ofxTimeMeasurements——OpenFrameworks插件,可以轻松测量C++代码任何部分的执行时间

一、简介 ofxTimeMeasurements是一款用于OpenFrameworks 开源C框架的插件&#xff0c;可以让使用者轻松测量C代码任何部分的执行时间。其优势在于以图形化的方式显示代码执行时间。效果如下&#xff1a; 只是它必须依赖OpenFrameworks&#xff0c;所以如果你不用这个框架&…

《Head First HTML5 javascript》第10章 自定义对象

2022.11.23 第10章 自定义对象 面向对象OOP(Object Oriented Programming) 对象是一个包含相关数据和方法的集合&#xff08;通常由一些变量和函数组成&#xff0c;我们称之为对象里面的属性和方法&#xff09;对象是存储在单个分组中的相关功能的集合。在 JavaScript 中&…

第二证券|多只公募基金损失惨重;储能板块低开高走

今天早盘&#xff0c;A股大幅低开&#xff0c;上证50指数直接跳空跌破2500点&#xff0c;最多跌逾3%&#xff0c;创业板指亦跌破2300点整数关口。 盘面上&#xff0c;酒店餐饮、旅游、储能、ST等板块逆势活跃&#xff0c;酿酒、工程机械、互联网、证券等板块跌幅居前。北上资金…

【LeetCode每日一题:1758. 生成交替二进制字符串的最少操作数~~~模拟+遍历+计数】

题目描述 给你一个仅由字符 ‘0’ 和 ‘1’ 组成的字符串 s 。一步操作中&#xff0c;你可以将任一 ‘0’ 变成 ‘1’ &#xff0c;或者将 ‘1’ 变成 ‘0’ 。 交替字符串 定义为&#xff1a;如果字符串中不存在相邻两个字符相等的情况&#xff0c;那么该字符串就是交替字符…

KVM虚拟机热扩容

创建一个虚拟机用于练习在线扩容 virt-install --name centos8-3 --memory 4096,currentMemory1024 --vcpus 2,maxvcpus8 --disk /var/lib/libvirt/images/centos8-3.qcow2,busvirtio,formatqcow2 --import --os-variant rhel8.0 --graphics vnc --network networkdefault…

Docker-JenKins安装及配置!

Jenkins官网&#xff1a;Jenkins 安装主机配置&#xff08;官方&#xff09;&#xff1a; 最低&#xff1a; 256 MB 内存 1 GB 的驱动器空间&#xff08;尽管如果将 Jenkins 作为 Docker 容器运行&#xff0c;则建议至少 10 GB&#xff09; 小团队推荐&#xff1a; 4 GB …

针对支付宝-当面付实现的个人支付

测试地址 项目背景 为什么想做这个 一是工作中也接触到了支付宝&#xff0c;微信支付方面&#xff0c;二是自己也想弄个收费服务&#xff0c;比如之后做的程序想收费可以直接让用户扫码支付&#xff0c;而不用微信交流了。 了解什么支付适合个人支付 微信支付&#xff1a;需要…

基于SpringBoot的实习管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue、HTML 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#…

Unity与IOS⭐Xcode打包,上架TestFlight的完整教程

文章目录 🟥 本章注意事项1️⃣ 证书及Archive2️⃣ 更新版本及加密规则🟧 Xcode打包出ipa文件🟨 将ipa上传到App Store Connect🟥 本章注意事项 1️⃣ 证书及Archive 上架TestFlight需要苹果企业版证书,而不是个人版证书。Archive时必须插上手机,否则会失败。2️⃣…

Prometheus 采集rabbitmq监控数据

Prometheus采集主机监控参考部署下载&#xff0c;图形生成 系统安装Grafana downloadWindows参考图形生成参考win_exporterLinux参考node_exporterMysql参考Mysql_exporterSQL Server参考SQL exporterRedis 参考Redis_exportercadvisor参考cadvisorrabbitmq参考参考rabbitmq s…

众多互联网公司都在用的Elasticsearch还不会?熬夜整理基于 Elasticsearch 7.x 版本的核心知识学习手册,值得拥有!

简介 简单来说 ElasticSearch 就是一个搜索框架。对于搜索这个词我们并不陌生&#xff0c;当我们输入关键词后&#xff0c;返回含有该关键词的所有信息结果。 在我们平时用到最多的便是数据库搜索&#xff1a; SELECT * FROM USE WHERE NAME LIKE %小菜%但是用数据库做搜索存…

Scala函数至简原则

一、Scala中的函数基础知识 1、基本语法 【函数和方法的区别】 【核心概念】 &#xff08;1&#xff09;为完成某一功能的程序语句的集合&#xff0c;称为函数。 &#xff08;2&#xff09;类中的函数称之方法。 【案例实操】 &#xff08;1&#xff09;Scala 语言可以在任何…

THP Maleimide,1314929-99-1,THP-Mal凯新生物双功能螯合剂

一、产品描述&#xff1a; THP-Mal 双功能螯合剂。肽和抗体标记。对SH基团的特异性反应&#xff0c;如半胱氨酸。炔烃马来酰亚胺是一种双功能接头试剂&#xff0c;可将末端炔烃连接到各种含硫醇分子&#xff0c;例如含有半胱氨酸残基的蛋白质&#xff0c;然后可以通过铜催化的…

2022腾讯全球数字生态大会【存储专场】它来了|预约有礼

它来了&#xff01;它来了&#xff01; 2022腾讯全球数字生态大会【存储专场】它来了&#xff01; 作为腾讯集团产业互联网规格最高、规模最大、覆盖面最广的年度盛会 今年存储专场与您一起探讨 分布式高性能存储与数据分析处理的科技创新和最新成果 存储会场六大亮点&…

java 基于 SpringMVC+Mybaties+ Html5 + Vue 前后端分离 房地产管理系统 的 设计与实现

一.项目介绍 本系统分为 两大块 前端 和 后端 &#xff08;前后端分离&#xff09; 角色分为三类&#xff1a; 管理员 销售 以及 普通用户 前端模块有&#xff1a;首页、房屋中心、关于大厦、新闻资讯、个人中心、后台管理、客服售后 其中个人中心&#xff1a;个人中心、我的收…

1.线性代数基础

1.矩阵 2. 特殊矩阵 正交矩阵 AATE&#xff08;E为单位矩阵&#xff0c;AT表示“矩阵A的转置矩阵”。&#xff09;或ATAE&#xff0c;则n阶实矩阵A称为正交矩阵 正交矩阵有如下性质&#xff1a; A是正交矩阵&#xff0c;AT也是正交矩阵A的各行是单位向量且两两正交&#xff0…

Google Earth Engine(GEE)——NASA NEX GDPDDP CMIP5数据集中的问题

问题&#xff1a; 我正在使用 NASA NEX GDPDDP CMIP5 集合。我注意到模型“GFDL-CM3”似乎缺少场景 RCP4.5 的 2096-2099 年。 您可以通过此脚本查看丢失的图像&#xff0c;并与模型 ACCESS1-0 进行比较&#xff1a; https://code.earthengine.google.com/7b505c81a59f10ba5…

[附源码]Python计算机毕业设计Django的高校车辆租赁管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…