React-router学习笔记 react-router基本使用

react-router-dom v6的基本使用 在react中使用react-router 阅读详情

和Vue有vue-router来管理路由一样,React中也有一个用于管理路由的react-router,基本的使用也是差不多的,下面通过一个项目的简单搭建来学习基本的使用方法

搭建项目

首先使用create-react-app脚手架搭建一个项目,搭建完成后将react-router,react-router-dom安装到本地项目

create-react-app mydemo

cnpm i react-router --save
cnpm i react-router-dom --save

接下来我们将src中的文件清空,自己重新来写一下

编写基本的路由

首先新建index.js,导入我们需要的各种内容

import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter as Router,Route,Link } from 'react-router-dom'

这里是要在web下运行,导入了BrowserRouter并命名为Router,接下里写一个组件来render到页面上

class AppRouter extends React.Component{
    render(){
        return (
            <div>here is AppRouter</div>
        )
    }
}

ReactDOM.render(<AppRouter />, document.getElementById('root'))

此时运行npm run start我们就能看到页面上的here is AppRouter了,接下来就是编写路由和路由对应的组件了
在react-router中,我们通过从react-router-dom中拿到的Link来做跳转,Route来做对应匹配哪个组件显示,这与vue-router中的router-link和router-view类似,不同的是,vue-router中的router-link和router-view可以和其他标签放的位置一样,而Link和Route却只能放在Router中,否则就会报错
正确的写法如下

class AppRouter extends React.Component{
    render(){
        return(
            <Router>
                <li>
                    <Link to="/">HOME</Link>
                </li>
                <li>
                    <Link  to="/about">ABOUT</Link>
                </li>
                <li>
                    <Link  to="/topics">TOPICS</Link>
                </li>
                {/* exact:精确匹配,为布尔值,默认为false,即不做精确匹配 */}
                {/* 需要完全匹配的时候才使用exact */}
                <Route exact path="/" component={Home} />
                <Route exact path="/about" component={About} />
                <Route exact path="/topics" component={Topics} />
            </Router>
        )
    }
}

然后我们编写相应的组件

class Home extends React.Component{
    render(){
        return(
            <div>this is Home page</div>
        )
    }
}

class About extends React.Component{
    render(){
        return (
            <div>this is About page</div>
        )
    }
}

class Topics extends React.Component{
    render(){
        return (
            <div>this is Topics page</div>
        )
    }
}

到这里就可以在页面上显示对应的内容并且做跳转了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里就算基本完成了,我们回到上面说的,如果我们不将Link和Route放在Router中,会发生什么呢

class AppRouter extends React.Component{
    render(){
        return(
            // 将Router替换成div
            <div>
                <li>
                    <Link to="/">HOME</Link>
                </li>
                <li>
                    <Link  to="/about">ABOUT</Link>
                </li>
                <li>
                    <Link  to="/topics">TOPICS</Link>
                </li>
                <Route exact path="/" component={Home} />
                <Route exact path="/about" component={About} />
                <Route exact path="/topics" component={Topics} />
            </div>
        )
    }
}

就会出现下面的报错
在这里插入图片描述
解决这个问题后,我们将Link和Route分别放在两个不同的组件,为了减少多余的父组件,这里使用fragments的短语法<></>

class AppRouter extends React.Component{
    render(){
        return(
            <Router>
                <RouterLink />
                <RouterShow />
            </Router>
        )
    }
}

class RouterLink extends React.Component{
    render(){
        return(
            <>
                <li>
                    <Link to="/">HOME</Link>
                </li>
                <li>
                    <Link  to="/about">ABOUT</Link>
                </li>
                <li>
                    <Link  to="/topics">TOPICS</Link>
                </li>
            </>
        )
    }
}

class RouterShow extends React.Component{
    render(){
        return(
            <> 
                {/* exact:精确匹配 */}
                {/* 需要完全匹配的时候才使用exact */}
                <Route exact path="/" component={Home} />
                <Route path="/about" component={About} />
                <Route path="/topics" component={Topics} />
            </>
        )
    }
}

Route的属性

接下来看看上面Route使用的两个属性exact和path,在vscode中可以直接按住ctrl点击Route标签看看这个组件的源代码
可以看到以下内容

export interface RouteProps {
  location?: H.Location;
  component?: React.ComponentType<RouteComponentProps<any>> | React.ComponentType<any>;
  render?: ((props: RouteComponentProps<any>) => React.ReactNode);
  children?: ((props: RouteChildrenProps<any>) => React.ReactNode) | React.ReactNode;
  path?: string | string[];
  exact?: boolean;
  sensitive?: boolean;
  strict?: boolean;
}
export class Route<T extends RouteProps = RouteProps> extends React.Component<T, any> { }

exact上面已经在代码的注释里面看到了,它是一个布尔值,告诉我们是否精确匹配,我们看到上面代码里面,About组件对应的路由是没用精确匹配的,所以下面的路由也可以显示About组件
在这里插入图片描述
而一旦修改为精确匹配
在这里插入图片描述
我们发现它已经匹配不到About组件了,这就是exact
说说path,显然path就是用来写路由,而componentj就是路由对应的组件,我们看到,在上面的代码中path是可以使用字符串和字符串数组的,也即是说,同一个组件,可以匹配多个路由,只要使用数组的形式来写就可以

<Route path={["/about",'/about1']} component={About} />

发现/about和/about1都可以显示About组件

React路由模块react-router-dom的安装及基本使用、传递路由参数 一、路由模块 在React项目中 若要实现页面的跳转 需使用路由 而react-router-dom正是React推荐的常用路由模块 安装 npm install react-router-dom 按需导入react-router-dom路由模块 HashRouter是路由的根容器 所有和路由相关的东西都要包裹在HashRouter内部 且一个网站只需要使用一次HashRouter Router是路由规则(rules) 其上有两个重要属性:path和component Link表示路由链接 类似于Vue中 阅读详情

相关推荐

(精华2020年5月24日更新) react基础篇 react-router-dom的基本使用

首先安装 npm i react-router-dom 到index.js中加入如下代码 import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import * as serviceWorker from './serviceWorker'; import {HashRouter,BrowserRouter} from 'react-route

一点一滴 1万+

react学习之组件间通信

react学习之组件间通信 代码:github-learn-react 父组件与子组件通信 通过props传递 export interface IChildProps { parentTellMe: string; } export interface IChildState { } export class Child extends React.Component<IChildP...

米斯特尔曾的博客 418

计算机补码两位乘法移位补0还是1,补码两位乘.doc

补码两位乘沈阳航空航天大学课 程 设 计 报 告课程设计名称:计算机组成原理课程设计课程设计题目:COP2000实现补码两位乘法院(系):计算机学院专 业:计算机科学与技术(嵌入式系统方向)班 级学 号:2009040101181姓 名:张驰指导教师:杨华完成日期:2012年1月14日目 录第1章 总体设计方案11.1设计原理11.2设计思路11.3设计环境2第2章...

weixin_34471838的博客 968

react基础必会语法

思路利用回调函数,父组件提供回调,子组件调用,将要传递的数据作为回调函数的参数。给表单元素添加change事件,设置state的值为表单元素的值(控制值的变化)在state中添加一个状态,作为表单元素的value值(控制表单元素的值)使用组件名.propTypes={}来给组件的props添加校验规则。非受控组件借助于ref,使用原生DOM的方式来获取表单元素的值。目的校验接收的props的数据类型,增加组件的健壮性。将子组件的数据作为参数传递给回调函数。将该函数作为属性的值,传递给子组件。......

m0_62823653的博客 724

linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

tun/tap设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。主要用于用户空间和内核空间传递报文。tun/tap对于硬件网络设备而言,一端连接的是物理网络,一端连接的是网络协议栈。对于tun/tap设备而言,一端连接的是应用程序(通过 字符设备文件),一端连接的是网络协议栈。

糖果墙的博客 6413

S32DS IDE调试技巧:如何用Attach功能高效定位汽车电子MCU的Bootloader问题

本文详细介绍了在汽车电子MCU开发中,如何利用S32DS IDE的Attach调试模式高效定位Bootloader与应用程序的协同问题。通过对比常规调试与Attach模式的本质差异,并深入讲解工程配置、镜像合并及实战调试流程,帮助开发者在不复位、不重新下载程序的前提下,实时分析系统状态,快速解决内存映射冲突、中断向量表重定向等疑难杂症。

weixin_29168393的博客 270

react的状态管理(全局通信)简单钩子方法

react状态管理简单示例(recoil, context, redux)

qq_42750608的博客 794

你不必懂AI,但必须会用AI:写给所有焦虑中的职场人

AI时代不必焦虑学技术,关键在于用AI解决实际问题。文章指出,99%的人只需成为AI使用者而非建造者,核心竞争力在于结合业务痛点运用AI工具提升效率。与其盲目学习工具,不如梳理工作流程,识别可优化环节,让AI赋能重复性、标准化任务。行业经验与AI工具的结合才是真正的职场护城河。建议从具体工作场景出发,寻找匹配的AI解决方案,迈出应用第一步。

hundred98的博客 718

react组件基本使用(typescript)

如果是用JavaScript开发可以忽略一切typescript的东西也是可以照常执行的 新建一个组件 interface Component&lt;P = {}, S = {}, SS = any&gt;{ // ..... } 组件基类的接口定义,P表示props,S表示state,SS未知,默认可以啥也不传 新建 import React, { Component } from 'r...

米斯特尔曾的博客 6377

国外无人机蜂群作战典型战例及发展趋势

参与袭击的无人机为简易组装的固定翼飞机,采用小排量活塞发动机和手机GPS通信模块零件,机翼为轻木加泡沫板混合结构,尾梁为铝合金方管,主要依靠胶带粘接,以上全部配件均可在商用市场买到,成本较低,可在短时间内装配完成。③战场纵深短、瞬时性强。蜂群作战的参战数量显著增加,这一方面得益于无人机技术的飞速发展使得廉价无人机可以大量生产和仿制,另一方面凭借迅速发展的投放和回收技术以及集群控制技术,使得无人机蜂群可在极短时间内实现编队饱和攻击,在快速消耗敌方高价值防空武器系统的同时,保证己方物资系统的突防概率。

renhongxia1的博客 2481

Modbus测试工具ModbusPoll与Modbus Slave使用方法 小白实操记录

Modbus 下面介绍modbus标准协议从站、主站仿真工具;可用于指令下发,数据采集等;是学习、现场运维的好工具。 1 介绍 Modbus Poll :Modbus主机仿真器,用于测试和调试Modbus从设备。该软件支持ModbusRTU、ASCII、TCP/IP。用来帮助开发人员测试Modbus从设备,或者其它Modbus协议的测试和仿真。它支持多文档接口,即,可以同时监视多个从设备/数据域。每个窗口简单地设定从设备ID,功能,地址,大小和轮询间隔。你可以从任意一个窗口读写寄存器和线圈。如果你想改

码灵的博客 1万+

React Native | 初代渲染器

在2022年react native的团队规划中,做了一次大的技术改造,将shadow树在cpp中实现,react采用fabric,整个渲染流水线发生了较大的变动。实例化FallbackViewManagerSetter对象的时候,会扫描ViewManager带有ReactProp注解的方法,并保存到ViewManagersPropertyCache的map中,当在setProperty刷新每个属性时,就会调用其对应的方法进行正在ui更新。React Native渲染场景我们分为初次渲染与状态更新。

分享经验与经历 979

倍福--TwinSAFE功能块的使用

在安全模块的程序设计中,输入变量取反,或者把PLC的变量连接到安全的功能块程序中, 操作流程 1.1. 功能块输出取反 例如修改IN,右击属性,然后可在Single-Channel选项中选择是NO还是NC的输入信号。 1.2. PLC标准变量作为安全程序的输入 1.2.1. 建立两个PLC变量 1.2.2. 安全程序区创建变量 1.2.3. 功能块变量链接 首先,PLC变量不能直接连到Estop功能块的输入变量中,否则会报错,但PLC可以连接到SafeAnd这些功能块,然后再转出来,如下所示

weixin_41883890的博客 5315

React 学习笔记 (七)(路由及路由嵌套 react-router 4.x 基本配置及使用)

react-router 根据用户访问的地址动态的加载不同的组件 1.安装 npm install react-router-dom --save 2.引入 import { BrowserRouter as Router, Route, Link } from &amp;amp;quot;react-router-dom&amp;amp;quot;; 3.使用 注意: &amp;amp;amp;lt;1&amp;amp;amp;gt;.要被根组件包裹 &amp;

小豆花儿的学习之路 375

微信小程序 - 真机调试请求异常 Provisional headers are shown,微信小程序开发者工具调试没问题就真机测试时出现请求报错(微信小程序请求接口提示Provisional h)

微信小程序开发 Request Headers: Provisional headers are shown,微信开发工具请求正常,真机调试和上线之后出现 Provisional headers are shown,微信小程序开发工具调试没问题,真机调试Provisional headers are shown,在开发工具调试,请求正常没问题,使用真机调试,请求异常,微信小程序真机调试时后台是本地服务器,显示“Provisional headers are shown”问题解决,微信小程序websocket

🏆 前端领域优质创作者 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

React - Router的基本使用介绍

目前前端流行的三大框架, 都有自己的路由实现:Angular的ngRouterReact的ReactRouterVue的vue-routerReact Router在最近两年版本更新的较快,并且在最新的React Router6.x版本中发生了较大的变化。目前React Router6.x已经非常稳定,我们可以放心的使用;

m0_71485750的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ReactJS学习系列课程(React Router 使用)

对于任何一个前端框架都有页面跳转,而这个跳转就一定需要路由的定义,比如Angular, Durandal等等,今天我们学习一下如果定义个路由在React中。为了便于理解,我们同样附上一段代码,看看究竟是如何实现的:import React from 'react' import { render, findDOMNode } from 'react-dom' import { browserHi

天外野草技术专栏 5323

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ReactJS 101路由实战:如何使用React Router构建单页应用的7个技巧

在当今前端开发领域,**React Router**已成为构建现代化**单页应用**(SPA)的黄金标准。作为React生态系中最重要的路由管理库,它让开发者能够轻松创建无缝的用户体验,实现页面间的平滑切换而无需重新加载。本文将分享7个实用技巧,帮助初学者快速掌握React Router的核心概念,构建高效的单页应用。 React Router架构图 ## 📋 技巧一:理解React Rou

gitblog_00208的博客 424

【工具篇】React-Router5路由使用教程

【工具篇】React-Router5路由使用教程 自我介绍 React-Router作为React体系的一个重要部分,是一个路由库。其可管理URL,实现组件的切换和状态的变换。 又拖更了好久好久了~~ 一、React-Router和React-Router-dom的选择 React-Router React-router提供了一些router的核心api,包括Router, Route, Switch等,但是它没有提供dom操作进行跳转的api。 React-Router-dom React-route

Mind_programmonkey的博客 2804

react-router-dom的基本使用

react-router-dom5和react-router-dom6一篇就够了

努力下来就凸头 3312

React Router使用方法

教你怎么学会使用React Router

m0_46335150的博客 2183

react router路由跳转传参,react-router-dom基本使用+4种传参方式

前言 目录前言一、使用场景二、使用方法三、总结 一、使用场景 二、使用方法 三、总结 你可能感兴趣的文章: vue中组件间通讯的8种方法

程序员良仔 7463

react-router-dom5.x的基本使用

react-router-dom5.x的基本使用

冷月心的博客 1万+

React Router 和 React Router DOM 的区别

在现代web开发中,单页应用(SPA)越来越受到欢迎。为了实现页面间的导航和状态管理,React Router成为了最流行的路由库之一。React Router 提供了动态路由的能力,使得开发者可以轻松地在React应用中进行页面导航。React Router有不同的实现版本,其中最常用的是 react-router 和 react-router-dom。虽然这两个库密切相关,但它们在设计目标和使用场景上存在一些显著的区别。本文将详细探讨这两个库的区别,以及它们各自的适用场景。

My_wife_QBL的博客 3486

react-router的基本使用

react-router的基本使用 1. 第一步当然是安装. 使用npm安装 npm Install react-router-dom 使用yarn安装 yarn add react-router-dom 2. 第二步就是导入. // 有两种url格式: BroswerRouter, 原型为h5的history模式, 路径中不带有`#` // HashRouter ,使用hash模式, 路径中带有 `#`, 两者比较常用BroswerRouter. import { BroswerRouter

weixin_40944062的博客 463

【React系列】react-router

前端路由是如何做到URL和内容进行映射呢?监听URL的改变。URLhashhrefhref

川峰的博客 1276
上一篇: React学习笔记--在组件化开发中使用redux
下一篇: 牛客 剑指offer二维数组中的查找
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值