热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

reactrouter6.4+的项目种路由实现方式(列举两种)

至笔者发布该文章为止,react-router

至笔者发布该文章为止,react-router已经到了6.8.2版本,但中文文档仍旧遥远,网上教程参差不齐而大多是老版本。故笔者也是顶着蹩脚的英文阅读能力对react-router的6.4+版本有了一定的认识后,写下本篇文章

来源: 官方文档
实际上,官方也给出了示例:https://github.com/remix-run/react-router/tree/dev/examples

由于先学习了vue的原因,我对路由数组实现路由的方式比较熟悉,故在此也列出了路由对象数组的实现方式,以及原本的路由组件实现方式
注意,这里的代码只是演示,具体撰写位置以实际为准(我这里是正好写一个项目)



正文如下

安装

yarn add react-router-dom // 当然npm什么的也ok,只是个人习惯用yarn

①路由组件实现方式

index.js

import { createRoot } from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import App from './App'const root = createRoot(document.getElementById('root'))
root.render(<BrowserRouter><App /></BrowserRouter>
)

App.js

import { Routes, Route, Link, Outlet } from &#39;react-router-dom&#39;const App &#61; () &#61;> {return (<div><Routes><Route path&#61;&#39;/&#39; element&#61;{<LatOut />}><Route path&#61;&#39;about&#39; element&#61;{<About />} /><Route path&#61;&#39;/dashboard&#39; element&#61;{<Dashboard />} /><Route path&#61;&#39;*&#39; element&#61;{<Nomatch />} /></Route></Routes></div>)
}// 一级路由
const LayOut &#61; () &#61;> {return (<div><ul><li><Link to&#61;&#39;/&#39;>Home</Link></li><li><Link to&#61;&#39;/about&#39;>About</Link></li><li><Link to&#61;&#39;/dashboard&#39;>Dashboard</Link></li><li><Link to&#61;&#39;/nothing-here&#39;>nothing here</Link></li></ul>{/* 在父路由元素中使用来呈现其子路由元素。这允许在呈现子路由时显示嵌套UI。如果父路由完全匹配&#xff0c;它将呈现子索引路由&#xff0c;如果没有索引路由&#xff0c;则什么也不呈现 */}<Outlet /></div>)
}// 以下为二级路由
function About() {return (<div><h2>About</h2></div>);
}function Dashboard() {return (<div><h2>Dashboard</h2></div>);
}function NoMatch() {return (<div><h2>Nothing to see here!</h2><p><Link to&#61;"/">Go to the home page</Link></p></div>);
}

路由组件的实现方式具体如下&#xff1a;
Routes组件包裹Route组件&#xff0c;而Route组件又可包裹它的下属Route组件&#xff08;即子路由&#xff09;
Link组件实现跳转&#xff0c;当然也可利用其他方式&#xff0c;这里只是示例
Outlet组件用在有子路由的父路由底部用于显示子路由&#xff08;如果需要&#xff09;

②路由对象数组实现方式

index.js

import { createRoot } from &#39;react-dom/client&#39;
import { BrowserRouter } from &#39;react-router-dom&#39;
import App from &#39;./App&#39;const root &#61; createRoot(document.getElementById(&#39;root&#39;))
root.render(<BrowserRouter><App /></BrowserRouter>
)

App.js

import { Link, Outlet, useRoutes } from &#39;react-router-dom&#39;export default function App() {const routes &#61; [{path: &#39;/&#39;,element: <LayOut />,children: [{path: &#39;dashboard&#39;,element: <Dashboard />,},{path: &#39;about&#39;,element: <About />,},{path: &#39;*&#39;,element: <Notmatch />}],},]const element &#61; useRoutes(routes)return (<div>{element}</div>)
}
function LayOut() {return (<div><ul><li><Link to&#61;"/">Home</Link></li><li><Link to&#61;"/about">About</Link></li><li><Link to&#61;"/dashboard">Dashboard</Link></li></ul><Outlet /></div>)
}
function About() {return (<div><h2>About</h2></div>)
}
function Dashboard() {return (<div><h2>Dashboard</h2></div>)
}
function Notmatch() {return (<div><h2>Not thing</h2><Link to&#61;&#39;/&#39;>Home</Link></div>)
}

路由对象数组的实现方式具体如下&#xff1a;
App组件内内置routes数组&#xff08;路由较多的时候也可将它单拎出去一个文件&#xff09;&#xff0c;并使用useRoutes Hook&#xff0c;它将返回element可用于渲染


事实上react-router6.4&#43;版本&#xff0c;有很多种路由实现方式&#xff0c;包括上述两种方法也可相互杂交&#xff0c;另还有RouterProvider等等。我这里只是列出了差距比较大而撰写方法最为截然不同的两种&#xff0c;我个人当然是青睐于路由数组&#xff0c;但还是各有各的喜欢吧


推荐阅读
  • vue使用
    关键词: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 代理模式的详细介绍及应用场景
    代理模式是一种在软件开发中常用的设计模式,通过在客户端和目标对象之间增加一层中间层,让代理对象代替目标对象进行访问,从而简化系统的复杂性。代理模式可以根据不同的使用目的分为远程代理、虚拟代理、Copy-on-Write代理、保护代理、防火墙代理、智能引用代理和Cache代理等几种。本文将详细介绍代理模式的原理和应用场景。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
author-avatar
suzhaolie
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有