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


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

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

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

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

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

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

    1.Router -> BrowersRouter

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

    1. <Router>
    2. v5版本以前
    3. Router>
    4. <BrowersRouter>
    5. v6版本以后
    6. 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对象,但是获取这个对象的方法和原生不一样

    1. const history = useHistory();
    2. //接下来再对history对象进行一些其他的操作

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

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

    1. const navigate = useNavigate();
    2. // 使用 navigate 函数进行路由跳转
    3. navigate('/about');

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

    5.在react中的子路由偏好

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

    报错了嘛?没有

    能跑嘛?不能

    咋回事?不知道

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

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

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

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

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

    举个例子

    1. import { BrowserRouter as Router, Link, Route } from 'react-router-dom';
    2. //父组件
    3. function ParentComponent() {
    4. return (
    5. <div>
    6. <Route path="/parent/child1" component={ChildComponent1} />
    7. <Route path="/parent/child2" component={ChildComponent2} />
    8. div>
    9. );
    10. }
    11. //子组件
    12. function ChildComponent1() {
    13. return <h2>子组件1内容h2>;
    14. }
    15. //子组件
    16. function ChildComponent2() {
    17. return <h2>子组件2内容h2>;
    18. }
    19. //根组件
    20. function App() {
    21. return (
    22. <Router>
    23. {/* 路由规则和组件的对应关系 */}
    24. <Route path="/parent" component={ParentComponent} />
    25. Router>
    26. );
    27. }

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

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

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

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

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

     

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

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

  • 相关阅读:
    计算机毕业设计(附源码)python整形医院管理系统
    洛谷刷题C语言:月份天数、找最小值、分类平均、一尺之棰、数字直角三角形
    使用AWS Systems Manager Inventory报错
    MATLAB算法实战应用案例精讲-【数据分析】数据仓库-数据治理
    书籍《软技能》读后感
    JUC快速学习笔记
    山东大学项目实训十六——可控音乐变压器Controllable Music Transformer
    数据结构——二叉树
    Mac 从源码安装wxWidgets 报错 fatal error: ‘tiff.h‘ file not found
    Redis之持久化实操(Linux版)
  • 原文地址:https://blog.csdn.net/weixin_62697030/article/details/132762203