React(6.5)路由系统

2023-11-20

路由系统

单页应用(SPA)的多页面切换 需要使用到路由功能。

多个组件的路由和切换 使用路由

React中默认没有安装路由,需要手动安装

安装不指定版本默认是最新版本6

目前大多数项目可能还处于版本5

# 安装5版本
npm install react-router-dom@5
# 不写版本号 就版本6 最新版
npm install react-router-dom

安装指令

npm i react-router-dom@5

安装之后,在package.json确认以下软件名称及其版本

"react-router-dom": "^5.3.0"

先装5版本,如果安装了新版本,通过以下命令卸载。重新安装5版本

npm 卸载命令

npm uninstall react-router-dom

概念:

BrowserRouter 管理整个路由系统

Switch 路由切换组件显示对应的位置 @6 Routes

Route 组件和路径的对应关系

  • @5 path 路径 URL路径 component 组件

    <Route path="/home" component={Home}>

  • @6 path 路径 URL路径 element 标签式调用

  • <Route path="/home" element={<Home/>}>

Link 跳转切换 to 跳转到路径

编程方式跳转

  • @5 rcc写法 路由参数 this.props.match.params

    this.props.history.push 跳转方法

  • @6 rfc写法 路由参数 useParam 跳转方法 useNavigate

以下为版本5的写法

①建立几个页面

/src/pages目录下建立A.js,B.js,C.js

页面组件内部,添加一些内容,生成一个组件,如果页面组件为空,切换路由会报错

src\pages\A.js 其它页面类似结构 文字内容做一个标识,方便切换之后,知道切换到哪个页面了

import React, { Component } from 'react'

export default class A extends Component {
  render() {
    return (
      <div>
        A页面
      </div>
    )
  }
}

②编写路由切换

/src/App.js

import React, { Component } from "react";
/**
 *  路由组成
 *  1.组件和路由对应关系  routes routes=[{path:'/a',component:'组件名称'}]
 *  2、router 管理整个路由
 *  3、router-link  切换标签 to 路径参数
 *  4、router-view  切换的组件展示的位置
 *
 */
// 1.导入react中路由的相关组件
// import as 别名 起个小名 方便调用
import {
  BrowserRouter as Router, // 管理整个路由系统
  Route, // 路径和组件的对应关系
  Switch, // 类似router-view切换之后显示组件的位置
  Link, // 类似router-link的作用 切换组件
} from "react-router-dom";
// 2.导入页面组件
import A from "./pages/A";
import B from "./pages/B";
import C from "./pages/C";
export default class App extends Component {
  render() {
    // 3.路由管理
    // Router管理整个路由
    return (
      <Router>
        {/* 切换标签 */}
        <div>
          <Link to="/a">A页面</Link><br/>
          <Link to="/b">B页面</Link><br/>
          <Link to="/c">c页面</Link><br/>
        </div>
        <hr/>
        {/* 对应关系和组件切换展示位置 */}
        <Switch>
          {/* Route 对应关系 path路径  component组件 */}
          <Route path="/a" component={A}></Route>
          <Route path="/b" component={B}></Route>
          <Route path="/c" component={C}></Route>
        </Switch>
      </Router>
    );
  }
}

路由练习

制作3个页面 名称为HomePage,NewsPage.js,ContactPage.js

首页,新闻页,联系我们

src/App.js

import React, { Component } from "react";
// 路由组件导入
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
// 页面组件导入
import Home from "./pages/HomePage";
import News from "./pages/NewsPage";
import Contact from "./pages/ContactPage";
export default class App extends Component {
  render() {
    return (
      <Router>
        <div>
          <Link to="/home">首页</Link>
          <br />
          {/* 传参 步骤2 */}
          <Link to="/news/100/标题">新闻</Link>
          <br />
          <Link to="/contact">联系我们</Link>
        </div>
        <hr />
        <Switch>
          {/* 默认访问的组件页面 */}
          {/* exact 精确匹配 path路径 */}
          <Route path="/" exact component={Home}></Route>
          <Route path="/home" component={Home}></Route>
          {/* 定义传参方式 步骤一 */}
          <Route path="/news/:id/:title" component={News}></Route>
          <Route path="/contact" component={Contact}></Route>
        </Switch>
      </Router>
    );
  }
}

src\pages\NewsPage@5.js

import React, { Component } from 'react'

export default class NewsPage extends Component {
  // React中把组件外部传入的数据 存放在props
  // 路由参数也存放在props
  render() {
    console.log(this.props);
    // es6 解构语法 从props中获取路由参数
    const {id,title} = this.props.match.params;
    // 获取编程跳转路由的方法
    const {push} = this.props.history;
    return (
      <div>
        新闻页
        <div>id:{id}</div>
        <div>title:{title}</div>
        {/* 编程方式跳转 通过事件触发方法 */}
        <button onClick={()=>push('/home')}>回到首页</button>
        <button onClick={()=>push('/contact')}>去联系我们</button>
      </div>
    )
  }
}

---------------------------------------------------------------------------------------------------------------------------------

下面是6版本

尝试6版本的写法,需要卸载5版本

卸载时关闭脚手架服务 ctrl+c

6版本中 编程跳转和接收路由参数 只能使用rfc

npm uninstall react-router-dom
npm i react-router-dom

/src/App.js

import React, { Component } from "react";
// 路由组件导入
import { BrowserRouter as Router, Route, Link, Routes } from "react-router-dom";
// 页面组件导入
import Home from "./pages/HomePage";
import News from "./pages/NewsPage";
import Contact from "./pages/ContactPage";
export default class App extends Component {
  render() {
    return (
      <Router>
        <div>
          <Link to="/home">首页</Link>
          <br />
          {/* 传参 步骤2 */}
          <Link to="/news/100/标题">新闻</Link>
          <br />
          <Link to="/contact">联系我们</Link>
        </div>
        <hr />
        <Routes>
          {/* 默认访问的组件页面 */}
          {/* exact 精确匹配 path路径 */}
          <Route path="/" exact element={<Home/>}></Route>
          <Route path="/home" element={<Home/>}></Route>
          {/* 定义传参方式 步骤一 */}
          <Route path="/news/:id/:title" element={<News/>}></Route>
          <Route path="/contact" element={<Contact/>}></Route>
        </Routes>
      </Router>
    );
  }
}

src\pages\NewsPage@6.js

import React from 'react'
import {useParams,useNavigate} from 'react-router-dom'
// hook rfc特性 react-router-dom
// 路由参数结构  useParams()
// 编程方式跳转  useNavigate()
export default function NewsPage() {
  // 获取路由参数
  const params = useParams();
  console.log(params);
  // es6解构语法获取id和title
  const {id,title} = params
  // 获取跳转方法
  const navigate = useNavigate();
  return (
    <div>
      新闻页
        <div>id:{id}</div>
        <div>title:{title}</div>
        {/* 编程方式跳转 通过事件触发方法 */}
        <button onClick={()=>navigate('/home')}>回到首页</button>
        <button onClick={()=>navigate('/contact')}>去联系我们</button>
    </div>
  )
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React(6.5)路由系统 的相关文章

随机推荐

  • 数模培训第二周——图论模型

    图论中最短路算法与程序实现 图论中的最短路问题 包括无向图和有向图 是一个基本且常见的问题 主要的算法有Dijkstra算法和Floyd算法 Floyd算法 简介 Floyd Warshall算法 英语 Floyd Warshall alg
  • 机器学习入门-数值特征-时间特征处理

    我们可以将一连串的时间特征进行拆分 比如 2015 03 08 10 30 00 360000 00 00 我们可以将其转换为日期类型 然后从里面提取年 月 日等时间信息 对于一些hour month等信息 我们也可以使用pd cut将ho
  • 单个IMU实现精确的轨迹重构

    惯性传感器 IMU 被广泛用于导航 运动状态研究 人体运动和步态分析等领域 然而 由于IMU的固有误差和测量误差 尤其是漂移误差 很少有人尝试基于IMU实现精确的轨迹重建 尤其是使用单个IMU 尽管如此 与视觉 红外线和超声波定位技术相比
  • C#——反射和特性

    元数据 程序是用来处理数据的 文本和特性都是数据 而我们程序本身这些也是数据 有关程序及其类型的数据被称为元数据 他们保存在程序的程序集中 反射 程序在运行时 可以查看其它程序集或其本身的元数据 一个运行的程序查看本身的元数据或者其他程序集
  • Java中基本类型自动转换与强制转换

    类型转换 Java 语言是一种强类型的语言 强类型的语言有以下几个要求 变量或常量必须有类型 要求声明变量或常量时必须声明类型 而且只能在声明以后才能使用 赋值时类型必须一致 值的类型必须和变量或常量的类型完全一致 运算时类型必须一致 参与
  • Python学习(3):批量修改文件名(以excel文件为例)

    coding utf 8 import os dir input 请输入文件路径 for root dirs files in os walk dir for i in range len files filename files i ne
  • python django 学习第3天 文件长传

    在根目录下新建media目录 在settings py 加入代码 为上传文件操作做准备 MEDIA ROOT os path join BASE DIR media MEDIA URL media 做一个新闻调查页面 在views 中加入
  • bash 括号(小括号,双小括号,中括号,双中括号,大括号)

    小括号 和大括号 主要包括一下几种 var cmd 和 exp var string var string var string var string var pattern var pattern var pattern var patt
  • 计算机网络运输层运输层协议概述

    运输层协议概述 进程之间的通信 下图说明运输层的作用 可以看出网络层为主机之间提供逻辑通信 而运输层为应用进程之间提供端到端的逻辑通信 根据应用程序的不同需求 运输层有两种不同的运输协议 1 面向连接的TCP 2 无连接的UDP 运输层的两
  • Vue-cli3更改项目logo图标

    1 图标切成对应大小 2 图标名称后缀与vue原有图标logo名称 后缀一致 favicon ico 并替换 3 vue项目根目录下 新建 vue config js 添加下列代码 module exports pwa iconPaths
  • 网络爬虫 - 1 网络爬虫基本概念和相关工具

    网络爬虫基本概念和相关工具 1 基本概念 1 什么是网络爬虫 web crawler 以前经常称之为网络蜘蛛 spider 是按照一定的规则自动浏览万维网并获取信息的机器人程序 或脚本 曾经被广泛的应用于互联网搜索引擎 使用过互联网和浏览器
  • Linux环境下的VScode使用教程

    前言 1 对于学习本文需要先有自行安装好VMware 对VMware有简单的了解 2 对于绝大多数使用Linux的人而言 经常在Windows环境下使用source insight进行编译程序 然后利用FileZilla将Windows的文
  • Vue出现弹出层时,禁止底部页面跟随滑动

    背景 最近在写一个vue项目 当出现弹出层时 发现底部页面跟随滚动 但是产品不想要这种效果 于是找各种资料 发现很多说法 但是试了试 发现有的根本就不行 比如说有人提出用vue中提供的 touchmove prevent方法来解决 但是我试
  • 算法设计与分析——算法设计工具Standard Template Library即STL(C++模板库)概述

    算法设计工具 STL 前言 STL是一个功能强大的基于模板的容器库 通过直接使用这些现成的标准化组件可以大大提高算法设计的效率和可靠性 一 STL构成 Container 容器 Algorithm 算法 Iterator 迭代器 二 什么是
  • encoder decoder模型_Transformer 模型的 PyTorch 实现

    Google 2017年的论文 Attention is all you need 阐释了什么叫做大道至简 该论文提出了Transformer模型 完全基于Attention mechanism 抛弃了传统的RNN和CNN 我们根据论文的结
  • 【从零开始学c++】——类和对象(一)

    类和对象 面向过程和面向对象的初步认识 1 类的引入 1 1类的定义 1 2 类的两种定义方式 2 类的访问限定符及封装 2 1 访问限定符 2 2 class定义的类与struct定义的类的区别 2 3 封装 3 类的作用域 4 类的实例
  • 商业模式简单介绍

    商业模式 商业模式 1 B2C 企业对消费者 2 C2B 消费者 对企业 3 B2B 企业对企业 4 C2C 消费者 对消费者 5 o2o 线上线下 6 O2P营销模式 即Online To Place 是本地化的O2O营销模式 一 关联对
  • 1.编译时常量:const

    编译时常量只能在函数之外定义 就可以在编译期间初始了 不能定义在函数方法内 修饰符const不适用于 局部变量 const val PI 3 1415 定义编译时常量 TODO 10 Kotlin语言的编译时常量 编译时常量只能是常用的基本
  • SpringBoot项目多环境配置(亲测有效)

    SpringBoot项目多环境配置 SpringBoot项目在多环境配置上表现的非常优秀 只需要非常简单的操作就可以完成配置 一 认识配置文件 在创建项目后 会看到一个resources目录下有一个application propertie
  • React(6.5)路由系统

    路由系统 单页应用 SPA 的多页面切换 需要使用到路由功能 多个组件的路由和切换 使用路由 React中默认没有安装路由 需要手动安装 安装不指定版本默认是最新版本6 目前大多数项目可能还处于版本5 安装5版本npm install re