04-react基础知识-路由

一、react路由环境安装

使用指令:npm i --save react-router-dom @type/react-router-dom进行react路由环境安装

二、引入路由

在main.jsx文件中引入该语句:

import { createBrowserRouter, RouterProvider } from 'react-router-dom'

定义一个变量router来接收createBrowserRouter(【】)”【】“里面是每个路由 的path(路径),当访问的是path里的路径时,则访问element的组件。

// 使用高阶组件,若要进行页面之间的跳转,必须使用suspense标签将其组件括起来,不然的话会报错嘞!!!

1.最简单的写法

 let router = createBrowserRouter([{
//页面访问的路径path: '/home',
//访问path路径时,页面显示element里的组件element: <div>首页页面</div>},{path: '/user',element: <div>用户页面</div>},{path: '/login',element: <div>登录呀呀呀</div>},])

2.进阶版一:访问相应的path页面,若要跳转到自己封装的组件

需要使用到高阶组件

如代码中load返回的是一个<com/>组件,然后element中使用该高阶组件进行懒加载,引入要访问的组件路径。即可

3.最终版,也是代码比较少的一种写法

import ReactDOM from 'react-dom/client'
import { createBrowserRouter, RouterProvider } from 'react-router-dom'
// 将path传进去
let load = (path) => {// 使用高阶组件,若要进行页面之间的跳转,必须使用suspense标签将其组件括起来,不然的话会报错嘞!!!let Comp = React.lazy(() => import(path))return (<React.Suspense><Comp></Comp></React.Suspense>)
}
let router = createBrowserRouter([{path: '/home',element: load('./component/01-son.jsx')},{path: '/granson',element: load('./component/hook/02-granSon')}])
ReactDOM.createRoot(document.getElementById('root')).render(// 在根组件中使用RouterProvider来提供路由功能<RouterProvider router={router}></RouterProvider>
)

三、页面之间跳转(无参跳转)

1.1Link标签和a标签的区别?

两者都可以链接到网络地址,

前者:当链接到当前项目中的路由的地址的话,不会刷新当前的网址,只是刷新当前的组件

后者:链接到当前项目中的路由的地址的话,刷新的话当前网址会重新加载,页面重新刷新

1.利用link标签进行跳转

//son页面import React, { useState } from 'react'
import { Link } from 'react-router-dom'
function Son() {return (<div><h2>son页面</h2>{/* 使用link进行专拣之间的跳转:减少了页面刷新的次数 */}<Link to='/granson'>跳转到granson页面</Link><br />//link标签跳转的第二种写法:to里面是两个花括号*****************************<Link to={{ pathname: '/granson' }}>跳转</Link><br />{/* a标签也可以实现页面跳转,但页面每次刷新,都会重新加载页面 */}<a href="/granson">a标签跳转</a><br /><Link to='http://www.baidu.com'>link链接到百度地址</Link><br /><a href="'http://www.baidu.com">a链接到百度地址</a></div>)}
export default Son//granson页面import React, { useContext } from 'react'
function Grandson() {return (<div><h5>Grandson页面</h5></div>)
}
export default Grandson

2.用编程式写法进行页面之间的跳转

代码中有编程式写法进行页面跳转的两种方式

import React, { useState } from 'react'
import { useNavigate } from 'react-router-dom'
function Son() {// 定义一个变量来接收刚刚引进来的函数let router = useNavigate()// 点击按钮router就去匹配相对应的组件进行跳转// 编程式写法的第一种写法=====================================function tiaozhuan() {router('/granson')}// 编程式写法的第二种写法======================================function tiao() {router({ pathname: "/granson" })}return (<div><h2>son页面</h2><button onClick={tiaozhuan}>点击跳转到granson页面</button><br /><br /><button onClick={tiao}>点击跳转到granson页面</button></div>)}
export default Son

四、页面之间跳转(有参跳转)

        1.state传参(常用)

使用编程式写法来进行传参:1.引入useNavitage函数

                                                2.给定一个假的数据obj

                                                3.定义一个变量来接收刚刚引入的useNavitage

                                                4.useNavitage的两个参数:(1:要跳转的页面路径

                                                                                               (2:state是要传递的数据

                                跳转后的页面若要使用从前面传递过来的数据,则需要引入useLocation

                                                5.用一个变量来接收引入的useLocation函数

                                                7.在控制台打印,即可在state里面找到从前面传递过来的数据,并且可以在该页面正常使用。

//son组件中====================================================================import React, { useState } from 'react'
import { useNavigate } from 'react-router-dom'
function Son() {let [obj, setobj] = useState([{ id: 1, name: "衣服", price: "125元", comment: "质量挺好好哈" },{ id: 2, name: "裤子", price: "133元", comment: "真棒呀!!" },{ id: 3, name: "鞋子", price: "232元", comment: "不错哦" }])let navigate = useNavigate()console.log(obj);function change(id) {console.log(id);// 使用navigate实现页面跳转,state来进行传递参数,这里是将id传递过去navigate({ pathname: "/granson" }, { state: { id } })}return (<div><h2>son页面</h2><div>{obj.map(el => <div key={el.id}><div>{el.name}</div><div>{el.price}</div><div>{el.comment}</div>{/* 点击button传递相应的参数id传递给change函数 */}<button onClick={() => { change(el.id) }}>点击跳转到granson页面</button></div>)}</div></div>)}
export default Son//granson组件中import React, { useContext } from 'react'
// 1.1在组件页面需要引入uselocation
import { useLocation } from 'react-router-dom'
function Grandson() {//1.2: 用一个变量来接收uselocation函数let obj = useLocation()// 在控制台的state中可以看到从son组件中传递过来的id和obj数据console.log(obj);return (<div><h5>Grandson页面</h5><div>{obj.state.id}</div>{/* 在granson页面可以正常使用 */}<div>{obj.state.obj[0].name}</div></div>)
}
export default Grandson

        2.query传参

                1.引入useNavitage

                2.定义一个变量来接收刚刚引入的useNavitage                

                3.useNavitage的两个参数:(1:要跳转的页面路径

                                                             (2:search是要传递的数据

                 跳转后的页面若要查看从前面传递过来的数据,则需要引入useLocation

                4.用一个变量来接收引入的useLocation函数

                7.在控制台打印,即可在search里面看到到从前面传递过来的数据,但不能直接取出来使用,需要自己去处理后才能正常使用

/son组件中===============================================================================import React, { useState } from 'react'
import { useNavigate } from 'react-router-dom'
function Son() {let [obj, setobj] = useState([{ id: 1, name: "衣服", price: "125元", comment: "质量挺好好哈" },{ id: 2, name: "裤子", price: "133元", comment: "真棒呀!!" },{ id: 3, name: "鞋子", price: "232元", comment: "不错哦" }])let navigate = useNavigate()console.log(obj);function change(id) {console.log(id);// 使用navigate实现页面跳转,search来进行传递参数navigate({ pathname: "/granson", search: "id=32&name='衣服'" })}return (<div><h2>son页面</h2><div>{obj.map(el => <div key={el.id}><div>{el.name}</div><div>{el.price}</div><div>{el.comment}</div>{/* 点击button传递相应的参数id传递给change函数 */}<button onClick={() => { change(el.id) }}>点击跳转到granson页面</button></div>)}</div></div>)}
export default Son//granson组件中=====================================================================import React, { useContext } from 'react'
// 1.1在组件页面需要引入uselocation
import { useLocation } from 'react-router-dom'
function Grandson() {//1.2: 用一个变量来接收uselocation函数let obj = useLocation()// 在控制台的state中的search可以看到传递过来的数据,但不能直接使用,需要自己进一步处理后再使用console.log(obj);return (<div><h5>Grandson页面</h5></div>)
}
export default Grandson

state和query传参两者的区别:前者是传递过去了那边直接可以使用,后者是传递过去的数据需要自己进一步处理后才能使用。

        3.动态路由传参

granson路由部分========================================================={path: '/granson/:dt',element: load('./component/hook/02-granSon')}//son组件部分=======================================================================import React, { useState } from 'react'
import { useNavigate } from 'react-router-dom'
function Son() {let navigate = useNavigate()function change() {// 在后面的控制台中的pathname中可以看到/granson/2023这个数据navigate({ pathname: "/granson/2023" })}return (<div><h2>son页面</h2><button onClick={change}>点击跳转到granson页面</button></div>)
}
export default Son//granson组件组分==========================================================================
import React, { useContext } from 'react'
// 1.1在组件页面需要引入uselocation
import { useLocation } from 'react-router-dom'
function Grandson() {//1.2: 用一个变量来接收uselocation函数let obj = useLocation()console.log(obj);return (<div><h5>Grandson页面</h5></div>)
}
export default Grandson

57行中传递了一个参数。

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

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

相关文章

新登录接口独立版变现宝升级版知识付费小程序-多领域素材资源知识变现营销系统

源码简介&#xff1a; 资源入口 点击进入 源码亲测无bug&#xff0c;含前后端源码&#xff0c;非线传&#xff0c;修复最新登录接口 梦想贩卖机升级版&#xff0c;变现宝吸取了资源变现类产品的很多优点&#xff0c;摒弃了那些无关紧要的东西&#xff0c;使本产品在运营和变现…

四万字Spark性能优化宝典

导读 发现一篇好文&#xff0c;分享给大家。 全文分为四个部分&#xff0c;基本涵盖了所有Spark优化的点&#xff0c;全文较长&#xff0c;建议收藏后PC端查看或工作中问题troubleshooting。 《Spark性能优化&#xff1a;开发调优篇》 《Spark性能优化&#xff1a;资源调优…

重新审视对比特币的九大批评!有些已被揭穿,而有些担忧可能会发生?

近日富达&#xff08;Fidelity&#xff09;发布《重新审视持续存在的比特币批评》长篇报告&#xff0c;针对9种常见针对比特币的批评进行回应&#xff0c;希望促使旁观者看清一些先入为主的观念&#xff0c;以理解比特币完整的价值主张。 批评1&#xff1a;比特币波动性太大&am…

TensorFlow(1):深度学习的介绍

1 深度学习与机器学习的区别 学习目标&#xff1a;知道深度学习与机器学习的区别 区别&#xff1a;深度学习没有特征提取 1.1 特征提取方面 机器学习的特征工程步骤是要靠手动完成的&#xff0c;而且需要大量领域专业知识深度学习通常由多个层组成&#xff0c;它们通常将更简…

【漏洞复现】Apache_Shiro_1.2.4_反序列化漏洞(CVE-2016-4437)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞分析3、漏洞验证 说明内容漏洞编号CVE-2016-4437漏洞名称Apache_Shiro_1.2.4_反序列化漏洞漏洞评级…

【MongoDB】索引 - 单字段索引

MongoDB支持在集合文档中的任意字段上创建索引&#xff0c;默认情况下所有的集合都有一个_id字段的索引&#xff0c;用户和应用可以新增索引用于查询和操作。 一、准备工作 这里准备一些学生数据 db.students.insertMany([{ _id: 1, name: "张三", age: 20, clas…

JSP 学生成绩查询管理系统eclipse开发sql数据库serlvet框架bs模式java编程MVC结构

一、源码特点 JSP 学生成绩查询管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;比较流行的servlet框架系统具有完整的源代码和数据库&#xff0c;eclipse开发系统主要采用B/S模式 开发。 java 学生成绩查询管理系统 代码下载链接…

ABAP Json和对象的转换

se24新建类ZCL_JSON保存 点击修改&#xff0c;进入下图界面&#xff0c;点击红框。 复制粘贴下面代码 CLASS zcl_json DEFINITIONPUBLICCREATE PUBLIC .PUBLIC SECTION. *"* public components of class ZCL_JSON *"* do not include other source files here!!!TYP…

一杯子三变:揭秘vue单页应用(spa)与内容动态加载的奥秘

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、什…

视频转码教程:轻松制作GIF动态图,一键高效剪辑操作

随着社交媒体的兴起&#xff0c;GIF动态图已经成为了人们表达情感、分享精彩瞬间的重要方式。而将视频转化为GIF动态图&#xff0c;不仅可以方便地在社交媒体上分享&#xff0c;还可以延长视频的播放时长&#xff0c;吸引更多的观众。本篇文章将为大家介绍如何将视频轻松转化为…

RestTemplate配置和使用

在项目中&#xff0c;如果要调用第三方的http服务&#xff0c;就需要发起http请求&#xff0c;常用的请求方式&#xff1a;第一种&#xff0c;使用java原生发起http请求&#xff0c;这种方式不需要引入第三方库&#xff0c;但是连接不可复用&#xff0c;如果要实现连接复用&…

dgl安装教程

我在矩池云服务器上安装了一个dgl的环境&#xff0c;以后都可以用这个了 首先我的基础环境是 最终的版本如下 安装步骤如下 pip install dgl0.9.1 -f https://s3.us-west-2.amazonaws.com/dgl-data/wheels/cu113/repo.html注意不能直接使用 pip install dgl -f https://s…

51单片机-定时计数器

文章目录 前言1 原理2.编程 前言 1 原理 2.编程 定时计算&#xff1a; 50ms501000us 一个机器周期&#xff1a;1.085us 65535 - 501000/1.08546082 故 40082*1.08549998.97 /*定时器1&#xff0c;定时模式 工作模式1 16位计数器&#xff0c; 定时20秒后使能蜂鸣器*/ #include…

自定义element-ui plus 函数式调用,在API,js中直接使用全局组件

npm方式: npm install -D unplugin-vue-components unplugin-auto-import yarn 方式 : yarn add unplugin-vue-components; yarn add unplugin-auto-import; 使用官方的这个&#xff1a; vite.config.js中配置 plugins: [vue(),AutoImport({resolvers: [ElementPlusResolve…

【GEE】7、利用GEE进行遥感影像分类【随机森林分类】

1简介 在本模块中&#xff0c;我们将讨论以下概念&#xff1a; 监督和非监督图像分类之间的区别。Google Earth Engine 提供的各种分类算法的定义和应用。如何使用 randomForest 设置和运行分类&#xff0c;以 aspen 存在和不存在作为示例数据集。 2背景 图像分类 人类自然倾向…

【黑马程序员】SpringCloud——微服务

文章目录 前言一、服务架构演变1. 单体架构2. 分布式架构2.1 服务治理 3. 微服务3.1 微服务结构3.2 微服务技术对比3.3 企业需求 二、SpringCloud兼容性 三、服务拆分及远程调用1. 服务拆分1.1 服务拆分注意事项1.2 导入服务拆分 Demo 2. 远程调用2.1 根据订单 id 查询订单功能…

C++入门(二)

前言 我们上一期介绍了什么是C&#xff0c;命名空间、输入输出、以及缺省参数。本期我们来继续介绍C的入门知识&#xff01; 本期内容介绍 函数重载 引用 内联函数 auto关键字 范围for 指针空值nullptr 目录 前言 本期内容介绍 一、函数重载 什么是函数重载&#xff1f; …

排序算法之-选择

算法原理 在未排序的数列中找出最大&#xff08;或最小&#xff09;的元素&#xff0c;然后将其存入到已排序的数列起始位置&#xff0c;紧接着在剩余的未排序数列中继续查找最大&#xff08;或最小&#xff09;的元素&#xff0c;并将其放入到已排序的数列末尾&#xff0c;依…

Flink--简介

1、Apache Flink 是一个实时计算的框架和分布式处理引擎&#xff0c;用于在无边界喝有边界数据流上进行有状态的计算&#xff0c;并且能够在常见的集群上运行&#xff0c;并能以内存速度和任意规模进行计算。 有边界数据流&#xff1a;指的是有开始&#xff0c;也有结束&…

SpringMVC使用AOP监听方法推送数据

导入aop的maven依赖 <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.12</version> </dependency>创建一个spring的XML文件编写aop配置 <?xml version"1.0" …