当前位置: 首页 > news >正文

一天搞定React(5)——ReactRouter(下)【已完结】

     Hello!大家好,今天带来的是React前端JS库的学习,课程来自黑马的往期课程,具体连接地址我也没有找到,大家可以广搜巡查一下,但是总体来说,这套课程教学质量非常高,每个知识点都有一个小案例,最后有一个总的美团外卖案例教学,大家可以看看我这篇文章,如果能够帮到你们,还请多多点赞o( ̄▽ ̄)d支持支持🌹,如果文章中有错误的或者是遗漏信息,可以在评论区指出或者是与我私信。我看到了消息,一定会及时更正过来∠(°ゝ°)。话不多说,直接开学💪⛽️

     本篇教学已完结,具体可查看教程:
1. 一天搞定React(1)——React安装与配置
2. 一天搞定React(2)——JSX语法
3. 一天搞定React(3)——Hoots组件
4. 一天搞定React(4)——Redux
5. 一天搞定Recat(5)——ReactRouter(上)
6. 一天搞定React(5)——ReactRouter(下)

文章目录

    • 嵌套路由
      • 默认二级路由
      • 404路由配置
    • 两种路由模式

嵌套路由

嵌套路由:在一级路由中又内嵌了其他路由,这种关系就叫做嵌套路由,嵌套至一级路由内的路由又称作二级路由。

步骤:

  1. 使用children属性配置路由嵌套关系

    const router = createBrowserRouter([{path:'/第一个页面名称',element:<组件一 />children:[	//使用`children`属性配置路由嵌套关系{path:'/嵌套组件名称',element:<组件二 />}]},
    ])
    
  2. 来到一级路由组件内部,使用<Outlet/>组件配置二级路由渲染位置

    import{ Link,Outlet } from 'react-router-dom'
    const 一级组件名称 =()=>{return(<div><Link to="/嵌套组件路径">嵌套组件</Link><Outlet />	//配置二级路由的出口</div>)
    }export default Layout
    

默认二级路由

当访问的是一级路由时,默认的二级路由组件可以得到渲染,只需要在二级路由的位置去掉path,设置index属性为true。

  1. 添加index: true属性实现默认二级路由

    children:[	//设置为默认二级路由一级路由访问的时候,它也能得到渲染{index: true,element:<组件二 />}
    
  2. 在一级组件里面配置

    const 一级组件名称 =()=>{return(<div><Link to="/">嵌套组件</Link>	//因为path已经去掉了,所以没有必要再写上路径<Outlet />	//配置二级路由的出口</div>)
    }
    

404路由配置

当浏览器输入url的路径在整个路由配置中都找不到对应的path,为了用户体验,可以使用404兜底组件进行渲染。这样就可以提示用户出现了404错误。

步骤:

  1. 准备一个NotFound组件(新建一个NotFound包,里面创建一个index.js文件)

    const NotFound = ()={return <div>出现404错误</div>
    }
    export default NotFound
    
  2. 在路由表数组的末尾,以*号作为路由path配置路由

    const router = createBrowserRouter([{path:'/第一个页面名称',element:<组件一 />children:[	//使用`children`属性配置路由嵌套关系{path:'/嵌套组件名称',element:<组件二 />}]},//在路由表数组的末尾,以`*`号作为路由path配置路由{path:`*`,element:<NotFound />}
    ])
    

两种路由模式

与vue一样也是有两种路由模式,history模式和hash模式。ReactRouter分别由createBrowerRoutercreateHashRouter函数负责创建。

这两种模式一共有以下区别:

  1. Hash模式:
    • 使用URL中的#号来标记路由路径(如http://example.com/#/home)。
    • 不会引起页面重新加载,兼容性较好,所有现代浏览器都支持。
    • 适用于对SEO要求不高或需要兼容老旧浏览器的场景。
  2. History模式:
    • 利用HTML5 History API(如pushStatereplaceState)实现URL的更新,无需#号(如http://example.com/home)。
    • 可以实现更美观的URL地址,但需要服务器端的配合来确保深层链接的有效性。
    • 适用于对SEO有一定要求或需要更美观URL地址的场景。

image-20240726182324671

在我们之前一直用的都是history路由模式来编写的。

import {createBrowserRouter} from 'react-router-dom'
const router = createBrowserRouter([{path:'/第一个页面名称',element:<组件一 />},
])

使用hash路由模式如下:

import {createHashRouter} from 'react-router-dom'		//只需要将原来的`createBrowerRouter`更改为`createHashRouter`
const router = createHashRouter([{path:'/第一个页面名称',element:<组件一 />},
])

相关文章:

  • 活动报名小程序
  • Oracle集群RAC磁盘管理命令asmcmd的使用
  • 【Android】ListView和RecyclerView知识总结
  • 初识c++:string类(2)
  • JavaScript(17)——事件监听
  • google 浏览器插件开发简单学习案例:TodoList;打包成crx离线包
  • 2024年钉钉杯大数据竞赛A题超详细解题思路+python代码手把手保姆级运行讲解视频+问题一代码分享
  • Vue3+Element Plus 实现table表格中input的验证
  • 堆的相关知识点
  • 【数据结构】二叉树链式结构——感受递归的暴力美学
  • 十大排序的稳定性和时间复杂度
  • 【proteus经典项目实战】51单片机用计数器中断实现100以内的按键计数并播放音乐
  • SAP MM学习笔记46 - 购买中的出力管理(消息管理)
  • IntelliJ IDEA 直接在软件中更新为最新版
  • 论文快过(图像配准|Coarse_LoFTR_TRT)|适用于移动端的LoFTR算法的改进分析 1060显卡上45fps
  • 网络传输文件的问题
  • 77. Combinations
  • C++11: atomic 头文件
  • ECS应用管理最佳实践
  • JavaScript函数式编程(一)
  • Logstash 参考指南(目录)
  • MySQL用户中的%到底包不包括localhost?
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 小李飞刀:SQL题目刷起来!
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • !!java web学习笔记(一到五)
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)常见O(n^2)排序算法解析
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (层次遍历)104. 二叉树的最大深度
  • (超详细)语音信号处理之特征提取
  • (附源码)ssm码农论坛 毕业设计 231126
  • (附源码)计算机毕业设计大学生兼职系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (未解决)macOS matplotlib 中文是方框
  • (一)kafka实战——kafka源码编译启动
  • (转)nsfocus-绿盟科技笔试题目
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ./configure,make,make install的作用(转)
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8.0 中有哪些新的变化?
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET Core中如何集成RabbitMQ
  • .net连接MySQL的方法
  • .NET中分布式服务
  • .NET周刊【7月第4期 2024-07-28】
  • /run/containerd/containerd.sock connect: connection refused
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn