[react基础]关于v6版本route的变化,以及常见应用模式

2023-11-09

该说不说,在做这些之前,你要记得一件事

route不是react或者vue等原本就有的组件!需要你手动下载!然后导入!

原本的框架只是最终挂载到一个html界面上!!!

别再问我为啥你扒下来的代码为啥不好使了!     讨厌 > _< 

 下载指令去看我另一篇推文

今天复盘了一下自己的实训项目以及课程设计,两个东西混用了不同版本的route导致产生了很多混淆内容,今天在这边辨析一下,顺便说明v6版本中我们倾向于怎么做

1.Router -> BrowersRouter

首先就算Router被细化成了多个不同的东西,使用区别如下

<Router>
    v5版本以前
</Router>

<BrowersRouter>
    v6版本以后
</BrowersRouter>

一共被分成了:

BrowerRouter:适用于常见的web应用

HashRouter:适用于静态页面(url不太一样)

MemoryRouter:适用于服务器环境(一些根本用不到url的情况是这样的)

而原本的Router不能再使用了

2.Switch -> Routes

其实除了改了名字以后其他没啥变化,只是承担具体路由的工具

(名字更加直白可懂了)

3.Route

对于每个基本路由来说,其实这个几乎没有改动,只要注意几点

1.path属性不是常见的对象或者jsx语法,只是一个字符串就行了

2.现在子组件内容有两种方法获取

element:这个属性允许你直接使用jsx语法去写dom标签

component:这个属性需要你直接输入一个组件对象,这个可以外部引入

至于link....我觉得属实是画蛇添足了

4.跳转的变化

其实有的时候我们偶然获取到一些项目,你会发现用v5里面仍然存在一些路由跳转的标签or属性,但是实际上有一些是作者自行封装的.

v5版本支持的仍然是原生js的路由跳转,即使用history对象,但是获取这个对象的方法和原生不一样

const history = useHistory();

//接下来再对history对象进行一些其他的操作

这个东西的用法和原生是一模一样的,虽然只是你手动获取命名的对象

但是再v6版本时候,这个路由跳转对象变了,使用方法也取消掉了原本history具有的功能,只剩跳转了

const navigate = useNavigate();

// 使用 navigate 函数进行路由跳转
navigate('/about');

现在这是获取一个路由跳转对象,或者说是函数,然后输入数值完成跳转

5.在react中的子路由偏好

刚开始学react的时候,我把子路由写成这样

报错了嘛?没有

能跑嘛?不能

咋回事?不知道

其实这就是典型的vue后遗症,总是想把路由全都托管到一起,组合在一个文件里面

但是react的子路由模式更倾向于,将子路由放在父组件内部自行管理,只是最后根据url决定显示哪些罢了.

在React Router中,通常更倾向于将子路由的定义分离到各自的组件中,以保持组件的独立性和可重用性。这意味着每个组件负责自己的子路由,而不需要将所有路由配置都放在一个地方。这种方法更加模块化,有助于更好地组织代码和维护路由结构。

在Vue中,通常会使用嵌套路由将父子关系直观地表达在一个地方,这对于某些场景可能更方便,但也可能导致路由配置相对集中在一个文件中。

选择使用哪种方式取决于你的项目需求和个人偏好。React Router的方式更加分散,适用于需要更灵活路由组织和组件独立性的场景。而Vue Router的方式更集中,适用于需要直观表示嵌套关系的场景。无论你选择哪种方式,都可以根据具体情况来决定如何组织你的路由结构。

举个例子

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

//父组件
function ParentComponent() {
  return (
    <div>
      <Route path="/parent/child1" component={ChildComponent1} />
      <Route path="/parent/child2" component={ChildComponent2} />
    </div>
  );
}

//子组件
function ChildComponent1() {
  return <h2>子组件1内容</h2>;
}

//子组件
function ChildComponent2() {
  return <h2>子组件2内容</h2>;
}

//根组件
function App() {
  return (
    <Router>
      {/* 路由规则和组件的对应关系 */}
      <Route path="/parent" component={ParentComponent} />
    </Router>
  );
}

另外这里要注意一个问题,子组件中要包含父组件的路由作为前缀!

 所以我们经常可以见到工程中,会在根组件上加上一些基础路由

 差不多这样子,后面有别的需求我再补充就是了

6.工程中的常见用法举例:(侧边栏路由导航)

(1)首先先单独封装一个路由对象的数组

 

(2)在你的侧边栏中使用map语句遍历,创建条目

(3)为每个条目添加跳转的点击事件即可

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

[react基础]关于v6版本route的变化,以及常见应用模式 的相关文章

  • Safari 不触发表单提交

    对于一个项目 我有两个选择表单字段 它们通过 jquery 触发器 提交 发送 这在 Firefox 和 Chrome 中运行良好 但在 Safari 中没有任何反应 这是 HTML 代码
  • JQuery UI Draggable - 如何知道元素是否可拖动初始化?

    我的逻辑是 if this draginited a drag disabled element shouldn t get pass here as it is inited this draggable 我搜索了很多 找不到实现这个逻辑
  • 如何将毫秒转换为可读的日期?

    下列 new Date 1324339200000 toUTCString Outputs Tue 20 Dec 2011 00 00 00 GMT 我需要它返回Dec 20 除了我可以使用的更好的方法之外toUTCString 我正在寻找
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 如何使用 RSpec 测试 javascript 重定向?

    我正在使用 xhr post 与控制器交互 并且我期待重定向 在 js erb 中 我有 window location href address 手动测试 浏览器会正确重定向 我如何使用 RSpec 测试它 response should
  • 检测 JavaScript 版本

    如何检测浏览器支持的 JavaScript 版本 如果有 我想检查 ECMAScript 3 ECMAScript 5 和 ECMAScript 6 注意 我想避免已弃用的language tag 这里有一个很好的参考给你 http www
  • Android键盘点击搜索输入时出现和消失

    我在用谷歌地图 Js API当我搜索一个地方时 我的输入搜索栏工作正常 当我通过 iPhone 设备使用它时 它也工作得很好 但是当我通过Android 设备然后键盘立即出现和消失 我已经找到了一些关于当我按下搜索栏时 android 键盘
  • 如何验证单选按钮?

    我的 Rails 应用程序中有一个单选按钮 我想编写一个 java 脚本代码 在未选择任何选项时验证这一点 在你的 votes 类中做类似的事情 class Myvotes lt ActiveRecord Base validates vo
  • .then(functionReference) 和 .then(function(value){return functionReference(value)}) 之间有区别吗?

    给定一个用于处理的命名函数Promise value function handlePromise data do stuff with data return data a 传递命名函数handlePromise作为参考 then pro
  • 如何从矩形点计算旋转角度?

    我有4分1 2 3 4闭合一个矩形 这些点按以下方式排列在数组中 x1 y1 x2 y2 x3 y3 x4 y4 我遇到的问题是矩形可以旋转一定角度 如何计算原始点 灰色轮廓 和角度 我试图在 javascript css3 transfo
  • 如何为多个元素添加Class?

    我正在使用这段 javascript 向多个元素添加一个类 我试图引用多个 div 并向它们添加类 它只适用于第一个 JavaScript
  • 节省页面加载时间的提示[重复]

    这个问题在这里已经有答案了 我的问题 削减那些不必要的 kb 并使页面加载速度更快的最佳方法是什么 全部是什么优化实践 编码实践 在js php中 如果执行可以使您的页面更轻 为什么我问这个 我读了这篇关于 jquery js 与 jque
  • 如何设置第三方 cookie

    我如何设置第三方 cookie 我有要求设置cookie 并且cookie将在访问的网站中启用 就像我在访问cde com或def com或ghi com时在abc com中设置cookie一样 所以设置的cookie将在所有网站上获取 我
  • 添加元数据到快速路线

    有什么方法可以将元数据添加到 Express 的路线中吗 例如 app get some route function req res some meta data 我正在寻找一种针对我的节点应用程序的 AOP 方法 因此我想通过身份验证和
  • 如何在没有查询参数的情况下重新加载页面?

    假设我想重新加载www domain com abc num 4 但我想重新加载www domain com abcONLY 问号后没有所有内容 window location window location href split 0
  • IE 开发工具断点不起作用

    我正在尝试在 IE 11 中调试一些 javascript 但无法强制它在断点处停止 debugger 行工作正常 停止该行中的调试器 相同的文件没有debugger 行但在同一位置设置断点不会执行任何操作 功能正常 但调试器不会在断点处停
  • 检测浏览器是否支持 contentEditable?

    There s 这个问题 https stackoverflow com questions 3497942 browser detect contenteditable features 但发布的解决方案是浏览器嗅探 我试图避免这种情况
  • 在 Javascript 中使用 fetch API 接收和处理 JSON

    在我的项目中 当条件不足时 我的 Django 应用程序会发送带有消息的 JSON 响应 我使用这个 JsonResponse 指令 Code data is taken email email return JsonResponse da
  • 为什么转换 new.Date() .toISOString() 会改变时间?

    我正在以两种不同的格式在数据库中插入日期 这是作为日期时间插入 var mydate mydate new Date document getElementById clockinhour value mydate toISOString
  • Page_ClientValidate 正在验证多次。

    我的问题是 验证摘要消息 警报 显示两次 我无法弄清楚原因 请帮忙 这是代码 function validate javascript function if typeof Page ClientValidate function var

随机推荐

  • Windows批处理(cmd/bat)常用命令小结

    一 前言 批处理文件 batch file 包含一系列 DOS命令 通常用于自动执行重复性任务 用户只需双击批处理文件便可执行任务 而无需重复输入相同指令 编写批处理文件非常简单 但难点在于确保一切按顺序执行 编写严谨的批处理文件可以极大程
  • Josephus问题,数组和链表(C++实现)

    文章目录 问题 需求分析 ADT定义 关键思路 问题 设有n个人围坐在圆桌周围 现从第s个人开始报数 数到第m的人出列 然后从出列的下一个人重新开始报数 数到第m的人又出列 如此反复直到所有的人全部出列为止 需求分析 n个人坐满一张圆桌 为
  • verilog赋多位值_Verilog重点解析(2)(赋值)

    源自 微信公众号 数字芯片实验室 1 连续赋值和过程赋值之间有什么区别 2 initial和always中的赋值有什么区别 initial和always中的赋值都是过程赋值 3 阻塞和非阻塞赋值之间有什么区别 阻塞和非阻塞赋值都是过程赋值
  • Zabbix监控Windows客户端设置

    Zabbix监控Windows客户端设置 一 Windows被控端安装 1 Windows代理下载 2 安装代理 二 检查被控端状态 1 查看端口 2 检查代理服务 3 服务端查看获取被控信息 三 Web端添加被控主机 1 添加主机信息 2
  • [1078]Win10配置Java环境变量

    文章目录 1 下载安装JDK 2 配置环境变量 2 1 找到jdk的安装目录 2 2 添加环境变量 2 3 测试 1 下载安装JDK 下载地址 安装就不赘述了 2 配置环境变量 2 1 找到jdk的安装目录 win e打开资源管理器 找到j
  • 手势控制arduino-wifi小车(含代码)

    手势控制器 小车完成图 贴代码 手势控制器代码 include
  • 使用VHDL语言控制相机

    将CMOS相机与ZYNQ 7000系列FPGA SoC连接 并将实时视频输入输出到VGA屏幕 硬件 软件 概述 在这个项目中 我们将从头开始构建一个FPGA映像平台 目的是将VGA分辨率CMOS相机与MiniZed Development板
  • 计算机超频的好处与坏处,CPU超频有什么坏处,到底会不会有副作用?

    超频是指提高计算机某一部件工作频率而使之工作在非标准频率下的行为及相关行动都应该称之为超频 其中包括CPU超频 主板超频 内存超频 显示卡超频和硬盘超频等等很多部分 一方面 超频可以使系统性能提升 并且提升产品的实用价值 但是对于大多数人仍
  • 图文详解微信小程序如何实现微信授权登录(Java后台)上

    详解微信小程序如何实现微信授权登录 Java后台 springboot框架 附关键源码 jar包依赖
  • STM32HAL 移植 cJSON开源库 (裸机开发神器)

    目录 概述 一 使用方法 二 STM32CubeMx配置 三 Examples 四 运行结果 五 总结 概述 本篇文章介绍如何使用STM32引用 cJSON开源库 JSON格式在互联网数据交互时常用的一个格式 现嵌入式物联网方向 经常使用到
  • php redis消息订阅与发布_PHP实现redis订阅和发布(用于异步任务处理)

    搜索热词 1 概念 名称及含义 channel频道 生产者和消费者直接操作的对象 publish生产者 向channel发送消息 subscribe消费者 订阅一个或多个channel psubscribe消费者 匹配订阅一个或多个chan
  • STM32输出2路PWM-------------------------------major

    major PWM输出 TIM2 TIM3 TIM4 定时器有四个独立通道 可以独立产生PWM 使用的芯片必须是100脚或144才有重映射功能 无重映射功能则使用默认的引脚即可 测试使用TIM3 1 初始化时钟 2 初始化GPIO 3 初始
  • 全国计算机等级考试题库二级C操作题100套(第87套)

    第87套 函数fun的功能是 统计长整数n的各个位上出现数字1 2 3的次数 并通过外部 全局 变量c1 c2 c3返回主函数 例如 当n 123114350时 结果应该为 c1 3 c2 1 c3 2 请在程序的下划线处填入正确的内容并把
  • 2021-11-09 indy使用,局域网发送文件的源代码(idUDPserver,idUDPClient)

    indy使用 局域网发送文件的源代码 idUDPserver idUDPClient 服务端 unit Unit1 interface uses Windows Messages SysUtils Variants Classes Grap
  • 外网测试telnet&SSH漏洞案例分析

    I 问题现象 我司通讯管理机产品 现场要连接外网 安全测试中发现以下问题 II 问题分析 我司通讯管理机产品开通了telnet 以及SSH服务 主要用来远程调试 问题分析 1 Unencrypted Telnet Server Telnet
  • 使用lev00生成电荷密度等高图

    以graphene为例 INCAR SYSTEM graphene ISTART 0 ICHARG 2 Startparameter for this run PREC A Electronic Relaxation ENCUT 500 N
  • 两两配对问题

    1 两两配对差值最小 题目描述 给定一个长度为偶数的数组arr 将该数组中的数字两两配对并求和 在这些和中选出最大和最小值 请问该如何两两配对 才能让最大值和最小值的差值最小 分析 主要是利用了c 里面对数组的一个排序函数sort 数组名
  • 【python】pip与conda的区别

    pip pip只能用来管理包 pip install能在任何环境中安装python包 也仅限python包 conda 现在听说只能通过anaconda和miniconda来安装 待科普 安装后可以使用conda来创建虚拟环境和管理包 关于
  • OVP过压保护IC高耐压36V,首选钰泰ETA7008/ETA7014

    深圳市展嵘电子有限公司有需要的上帝可联系小陈 136 6225 3950 3412 1522 98产品描述 ETA7008是一颗非常适合用于无线充和移动电源的高耐压保护IC 性价比非常好 有很大程度防止移动电源容易过压烧毁的可能 ETA70
  • [react基础]关于v6版本route的变化,以及常见应用模式

    该说不说 在做这些之前 你要记得一件事 route不是react或者vue等原本就有的组件 需要你手动下载 然后导入 原本的框架只是最终挂载到一个html界面上 别再问我为啥你扒下来的代码为啥不好使了 讨厌 gt lt 下载指令去看我另一篇