react路由基础

1.目录

A. 能够说出React路由的作用
B. 能够掌握react-router-dom的基本使用
C. 能够使用编程式导航跳转路由
D. 能够知道React路由的匹配模式

2.目录

A. React路由介绍
B. 路由的基本使用
C. 路由的执行过程
D. 编程式导航
E. 默认路由
F. 匹配模式

3.react路由介绍

现代的前端应用大多都是SPA(单页应用程序),也就是只有一个HTML页面的应用程序。因为它的用户体
验更好、对服务器的压力更小,所以更受欢迎。为了有效的使用单个页面来管理原来多页面的功能,前
端路由应运而生。
A. 前端路由的功能:让用户从一个视图(页面)导航到另一个视图(页面)
B. 前端路由式一套映射规则,在React中,是URL路径与组件的对应关系
C. 使用React路由简单来说,就是配置路径和组件(配对)

4.路由的基本使用

4.1 基本使用

A. 安装:yarn/npm add react-router-dom
B. 导入路由的三个核心组件:Router/Route/Link
import { BrowserRouter as Router, Route, Link} from ‘react-router-dom’
C.使用Router组件包裹整个应用(重要)

<Router>
<div className=”App”>
//......省略页面内容
</div>
</Router>

A. 使用Link组件作为导航菜单(路由入口)

<Link to="/first">页面一</Link>

B. 使用Route组件配置路由规则和要展示的组件(路由出口)

import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";
const First = () => <p>页面一的内容</p>;
const App4 = () => {return (// 使用 Router 包裹整个应用<Router><div><h1>React路由基础</h1>{/* 指定路由入口  */}<Link to="/first">页面1</Link>{/* 指定路由出口 */}<Routes><Route path="/first" element={<First></First>}></Route></Routes></div></Router>);
};
ReactDOM.createRoot(document.getElementById("root")).render(<App4></App4>);

4.2 常用组件说明

A. Router组件:包裹整个应用,一个React应用只需要使用一次
B. 两种常用Router:HashRouter和BrowserRouter
C. HashRouter:使用URL的哈希值实现(localhost:3000/#/first)
D. (推荐)BrowserRouter:使用H5的history API实现(localhost:3000/first)
E. Link组件:用于指定导航链接(a标签)
F. Route组件:指定路由展示组件相关信息

import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";
const First = () => <p>页面一的内容</p>;
const App4 = () => {return (// 使用 Router 包裹整个应用<Router><div><h1>React路由基础</h1>{/* 指定路由入口  */}<Link to="/first">页面1</Link>{/* 指定路由出口 */}{/* path:路由规则element:指定组件就展示在哪里Route 组件写在哪里,渲染出来的组件*/}<Routes><Route path="/first" element={<First></First>}></Route></Routes></div></Router>);
};
ReactDOM.createRoot(document.getElementById("root")).render(<App4></App4>);

5.路由的执行过程

A. 点击Link组件(a标签),修改了浏览器地址栏中的url
B. React路由监听到地址栏url的变化
C. React路由内部遍历所有Route组件,使用路由规则(path)与pathname进行匹配
D. 当路由规则(path)能够匹配地址栏中的pathname时,就展示该Route组件的内容
在这里插入图片描述

import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";
const First = () => <p>页面一的内容</p>;
const Home = () => <h1>首页的内容</h1>;
const App4 = () => {return (// 使用 Router 包裹整个应用<Router><div><h1>React路由基础</h1>{/* 指定路由入口  */}<Link to="/first">页面1</Link><Link to="/home">首页</Link>{/* 指定路由出口 */}{/* path:路由规则element:指定组件就展示在哪里Route 组件写在哪里,渲染出来的组件*/}<Routes><Route path="/first" element={<First></First>}></Route><Route path="/home" element={<Home></Home>}></Route></Routes></div></Router>);
};
ReactDOM.createRoot(document.getElementById("root")).render(<App4></App4>);

在这里插入图片描述

6.编程式导航

A. 场景:点击登录按钮,登录成功后,通过代码跳转到后台首页,如何实现?
B. 编程式导航:通过JS代码来实现页面跳转
C. History是React路由提供的,用于获取浏览器历史记录的相关信息
D. push(path):跳转到某个页面,参数path表示要跳转的路径
E. go(n):前进或后退到某个页面,参数n表示前进或后退页面数量(比如:-1表示后退到上一页)
8.history.js

import React from "react";
import {BrowserRouter as Router,Routes,Route,Link,useNavigate,
} from "react-router-dom";
function Login() {let navigate = useNavigate();const handleClick = () => {navigate("/home");};return (<div><p>我是登录页</p><button onClick={handleClick}>登录</button></div>);
}const Home = () => {let navigate = useNavigate();function goBack() {navigate(-1);}return (<div><h1>后台首页</h1><button onClick={goBack}>返回上一页</button></div>);
};const App60 = () => {return (<Router><div><h1>编程式导航</h1><Link to="/login">去登录页面</Link><Link to="/home">首页</Link><Routes><Route path="/login" element={<Login></Login>}></Route><Route path="/home" element={<Home></Home>}></Route></Routes></div></Router>);
};export default App60;

index.js

import App60 from "./8history";
ReactDOM.createRoot(document.getElementById("root")).render(<App60></App60>);

7.默认路由

A. 问题:现在的路由都是点击导航菜单后展示的,如何在进入页面的时候就展示呢?
B. 默认路由:表示进入页面时就会匹配的路由
C. 默认路由path为:/
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cmake如何将源文件按照指定的组织方式进行分组,在IDE例如vistual stdio或者xcode项目工程文件中展示和管理这些源文件

1、我们先来看下面的一个项目的结构 TestGroup工程下面的main.cpp同级的有两个文件夹&#xff0c;到时候我们想在IDE比如xcode或者visual stdio2019中也显示这样的结构怎么弄呢(答案是用cmake中的source_group函数) 2、假如没有用source_group生成的xcode工程是怎么样的&#…

鸿蒙ArkTs开发WebView问题总结

1. 加载WebView页面报错"Can not read properties of null (reading getltem)" 解决: 在加载webview的controller中加入.domStorageAccess(true) build() {Column() {Row().width(100%).height(50rpx)Web({ src: src, controller: this.controller }).javaScriptAc…

跟着cherno手搓游戏引擎【28】第一个游戏!源码解读!逐行注释!

源码解读&#xff1a; GameLayer层级&#xff1a;在构造函数中&#xff1a;创建窗口和相机&#xff0c;对随机数种子初始化&#xff1b; 在OnAttach方法中&#xff1a;初始化关卡&#xff1a;加载资源初始化地图信息&#xff1b;设置字体&#xff1b; 在OnUpdate方法中&…

云原生架构技术揭秘:探索容器技术的奥秘

云原生的概念和演进都是围绕云计算的核心价值展开的&#xff0c;比如弹性、自动化、韧性&#xff0c;所以云原生所涵盖的技术领域非常丰富。 随着云计算技术的不断发展&#xff0c;云原生架构已经成为了新一代软件开发的重要趋势。本文将为您介绍云原生架构的相关技术&#xf…

java BIO深入学习

一、BIO的工作原理 传统Io(BIO)的本质就是面向字节流来进行数据传输的 ①:当两个进程之间进行相互通信&#xff0c;我们需要建立一个用于传输数据的管道(输入流、输出流)&#xff0c;原来我们传输数据面对的直接就是管道里面一个个字节数据的流动&#xff08;我们弄了一个 by…

综合实战(volume and Compose)

"让我&#xff0c;重获新生~" MySQL 灾难恢复 熟练掌握挂载卷的使用&#xff0c;将Mysql的业务数据存储在 外部。 实战思想: 使用 MySQL 5.7 的镜像创建容器并创建一个普通数据卷 "mysql-data"用来保存容器中产生的数据。我们需要容器连接到Mysql服务&a…

java008 - Java方法

1、方法概述 1.1 概念 将独立功能的代码块组织成为一个整体&#xff0c;使其具有特殊功能的代码集。 1.2 注意事项 方法必须先创建才能使用&#xff0c;该过程称为方法的定义方法创建好不能直接运行&#xff0c;需要手动使用才执行&#xff0c;该过程称为方法的调用 2、方…

观察者模式与发布订阅模式

观察者模式 定义&#xff1a; 观察者模式是一种行为型设计模式&#xff0c;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 结构图&#xff1a; ES6简易代码实现&#xff1a; //ts环境下…

ai作画在线生成!这8个AI生图工具一定要知道。

过去的2023年被称作AI元年&#xff0c;随之而来的2024&#xff0c;被业内人士称之为AI应用元年&#xff0c;即随着大模型和各类AI应用的涌现速度放缓&#xff0c;人们关注的焦点也从产品层面&#xff08;有哪些好用的AI应用&#xff09;&#xff0c;转移到AI如何更好地赋能实际…

【Godot4自学手册】第十七节主人公的攻击和敌人的受伤

本节主要学习主人公是如何向敌人发起进攻的&#xff0c;敌人是如何受伤的&#xff0c;受伤时候动画显示&#xff0c;击退效果等。其原理和上一节内容相同&#xff0c;不过有许多细节需要关注和完善。 一、修改Bug 在本节学习之前&#xff0c;我将要对上一节的代码进行完善&am…

androidframework开发面试,阿里P8成长路线

字节跳动Android面经 一面问的 Java 和 Android 基础 1、Jvm虚拟机 2、messageQueue会不会阻塞ui线程 3、对象锁和类锁 4、之字形打印树 5、还有其他的 《Android学习笔记总结最新移动架构视频大厂安卓面试真题项目实战源码讲义》 **完整开源项目&#xff1a;docs.qq.com/doc…

【leetcode】破解闯关密码 模板字符串

/*** param {number[]} password* return {string}*/ var crackPassword function(password) {return minNumspassword.sort((a,b)>{if(${a}${b}-${b}${a}>0){return 1;}else{return -1;}}).join(""); };巧用模板字符串对数组进行排序