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

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

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)为每个条目添加跳转的点击事件即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值