ReactRouter中文文档(v5)自从React16发布后,ReactRouter也发布了第五个版

首先,安装create-react-app并用它创建一个新的项目。

npminstall-gcreate-react-appcreate-react-appdemo-appcddemo-app安装你可以用npm或者yarn安装ReactRouter,由于我们在构建一个webapp,所以我们在这个文档中使用react-router-dom

npminstallreact-router-dom接下来,赋值粘贴下面的任意一个列子到项目的/App.js中。

在这个例子中,路由器处理了3个页面:home、about、user。当你点击不同的Link时,路由器会渲染与之匹配的Route

ReactRouter中的组件主要分为三类:

我们也喜欢将导航组件称为"routechangers"。

注意:在webapp中,所有这些组件需要从react-router-dom中引入。

import{BrowserRouter,Route,Link}from"react-router-dom";路由器每个ReactRouter应用程序的核心应该是路由器组件。对于web项目,react-router-dom提供BrowserRouter和HashRouter路由器。两者之间的主要区别是它们存储URL和与Web服务器通信的方式。

要使用路由器,只需要确保将其渲染在根目录下即可,通常,您会将顶级的App元素包装在路由器下,如下所示:

如果没有匹配的Route,Switch将什么都不会渲染(null)。

webpack内置了对动态导入的支持;但是,如果您使用的是Babel(例如,将JSX编译为JavaScript),则需要使用@babel/plugin-syntax-dynamic-import插件。这是仅语法的插件,这意味着Babel不会进行任何其他转换。该插件仅允许Babel解析动态导入,因此webpack可以将它们捆绑为代码拆分。您的.babelrc应该如下所示:

{"presets":["@babel/preset-react"],"plugins":["@babel/plugin-syntax-dynamic-import"]}loadable-components是用于通过动态导入加载组件的库。它自动处理各种边缘情况,并使代码拆分变得简单,下面是有关如何使用loadable-components的示例:

由于浏览器已经开始处理“默认情况”,并且应用具有不同的滚动需求(例如本网站),因此我们不提供默认滚动管理功能。本指南可以帮助您实现所需要的滚动功能。

import{useEffect}from"react";import{useLocation}from"react-router-dom";exportdefaultfunctionScrollToTop(){const{pathname}=useLocation();useEffect(()=>{window.scrollTo(0,0);},[pathname]);returnnull;}如果您尚未使用React16.8,则可以使用React.Component子类执行相同的操作:

importReactfrom"react";import{withRouter}from"react-router-dom";classScrollToTopextendsReact.Component{componentDidUpdate(prevProps){if(this.props.location.pathname!==prevProps.location.pathname){window.scrollTo(0,0);}}render(){returnnull;}}exportdefaultwithRouter(ScrollToTop);然后将其放在您应用的顶部。

在这一点上,我们希望提供一个通用的API。这就是我们想要实现的:

棘手的部分是当你不希望窗口滚动被管理的时候,如何定义一个"退出"的api,例如,如果您在页面内容中浮动了一些标签导航,则可能不想滚动到顶部。

当我们得知Chrome现在可以为我们管理滚动位置,并意识到不同的应用程序将具有不同的滚动需求时,我们有点迷失了我们需要提供某些东西的信念,尤其是当人们只想滚动到顶部时。

本指南的目的是说明使用ReactRouter时要具有的思维模型。我们称之为“动态路由”,它与您可能更熟悉的“静态路由”完全不同

//AngularStylerouting:constappRoutes:Routes=[{path:"crisis-center",component:CrisisListComponent},{path:"hero/:id",component:HeroDetailComponent},{path:"heroes",component:HeroListComponent,data:{title:"HeroesList"}},{path:"",redirectTo:"/heroes",pathMatch:"full"},{path:"**",component:PageNotFoundComponent}];@NgModule({imports:[RouterModule.forRoot(appRoutes)]})exportclassAppModule{}Ember有一个常规的route.js文件,该版本会为您读取并导入到应用程序中。同样,这是在您的应用渲染之前发生的。

//EmberStyleRouter:Router.map(function(){this.route("about");this.route("contact");this.route("rentals",function(){this.route("show",{path:"/:rental_id"});});});exportdefaultRouter;尽管API不同,但它们都共享“静态路由”模型。ReactRouter也跟进了直到v4。为了成功使用ReactRouter,您需要忘记上面这些内容!

当我们讨论动态路由时,我们是指在您的应用渲染时发生的路由,而不是在运行中的应用之外配置或约定的。

这意味着几乎所有内容都是ReactRouter中的一个组件。下面是对该API的60秒回顾,以了解其工作原理:

首先,为您要定位的环境获取一个Router组件,并将其呈现在应用程序的顶部。

许多路由器具有“嵌套路由”的概念。如果您使用了v4之前的ReactRouter版本,那么您也会知道它也是如此,当您从静态路由配置转移到动态渲染的路由时,如何“嵌套路由”?

再进一步学习更复杂的内容吧!

考虑到一个用户导航至/invoices,您的应用程序适应不同的屏幕尺寸,他们屏幕比较小的时候,你只能向他们展示单据清单和跳转单据的dashboard的链接,所以他们可以从这里在跳转到更深的地方。

SmallScreenurl:/invoices+----------------------+|||Dashboard|||+----------------------+|||Invoice01|||+----------------------+|||Invoice02|||+----------------------+|||Invoice03|||+----------------------+|||Invoice04|||+----------------------+在更大的屏幕上,我们希望显示一个主从视图,该视图的左侧是导航,而dashbord或特定的单据则显示在右侧。

LargeScreenurl:/invoices/dashboard+----------------------+---------------------------+||||Dashboard||||Unpaid:5|+----------------------+|||Balance:$53,543.00||Invoice01||||PastDue:2|+----------------------+|||||Invoice02||||+-------------------+|+----------------------+||||||+++|||Invoice03|||+||||||||||+|+||+----------------------+|||||||||||+--+-+--+--+--+--+--+||Invoice04|||||+----------------------+---------------------------+现在暂停一分钟,思考一下/invoices路径如何适配两种屏幕大小,或者更大的屏幕呢,他还能适用吗?我们应该在右边放什么呢?

url:/invoices+----------------------+---------------------------+||||Dashboard|||||+----------------------+|||||Invoice01|||||+----------------------+|||||Invoice02|||||+----------------------+|||||Invoice03|||||+----------------------+|||||Invoice04|||||+----------------------+---------------------------+在大屏幕上,/invoices不是有效的路径,但在小屏幕上是,为了使事情变得更有趣,请考虑使用大型手机的人。他们可能会纵向查看/invoices,然后将手机旋转至横向。突然,我们有足够的空间来显示主从界面,因此您应该立即进行重定向!

ReactRouter带有一些hooks,可让您访问路由器的状态并从组件内部执行导航。

请注意:您需要使用React>=16.8才能使用这些钩子

useHistoryhook使您可以访问可用于导航的历史记录实例。

如下示例:

默认为"slash"

要呈现的单个子元素

允许访问组件的底层引用。

使用React.createRef获取组件的底层引用。

NavLink是Link标签的一个特殊版本,当匹配到当前URL时,可以为渲染的元素添加特定的样式属性。

aria-current属性的值应用在active的link上。有效值为:

默认为page

location.key的长度,默认为6。

要呈现的单个子元素(组件)

渲染一个Redirect组件将跳转至一个新的地址,新地址将覆盖历史记录中的当前条目。就像服务端的重定向。

如果push为true,重定向将会向历史记录中推入新的条目而不是替换当前条目。

路由组件可能是ReactRouter中了解和学习中使用的最重要的组件。他的最基本的职责是在其路径与当前URL匹配时呈现某些UI。

思考下面的代码:

建议使用的Route渲染方式是使用子元素,就像上面的例子上展示的。但是还是有一些其他的方式可用于Router渲染。提供这些方式主要是为了支持引用hooks之前版本的路由器构建的应用程序。

在不同的情况下使用不同的方式。在指定的中,你应该只使用其中的一种。请参阅下面的解释,了解为什么有三个选项。

所有的渲染方式都会提供相同的三个路由属性。

Reactcomponent仅当路径匹配时才会渲染。它将会与routeprops一起渲染。

使用render可以方便地进行内联渲染和包装,而无需进行上文解释的不必要的组件重装。

你可以传入一个函数,以在位置匹配时调用,而不是使用component创建一个新的React元素。render渲染方式接收所有与component方式相同的routeprops。

有些情况下,不管路径是否与位置匹配,你都需要去渲染一些东西,在这种情况下,你可以使用childenprop,除了不论是否匹配它都会被调用以外,它的工作原理与render完全一样。

children属性与component和render属性接收相同的routeprops,除法路由与路径不匹配,不匹配时match为null。它允许你根据路由是否匹配动态的调整你的UI。如下所示,如果路线匹配,我们会添加一个激活类。

可以是path-to-regexp能够理解的任何有效的URL路径。

当为true时,只有在path完全匹配location.pathname时才匹配。

使用低阶Router的最常见用例是同步一个自定义历史记录与一个状态管理库,比如Redux或Mobx。请注意,将ReactRouter和状态管理库一起使用并不是必需的,它仅用于深度集成。

这与仅仅使用一系列Route有何不同?

Switch只会渲染一个路由。相反,仅仅定义一系列Route时,每一个与路径匹配的Route都将包含在渲染范围内。考虑如下代码:

但是,有时候我们只想选择一个Route来呈现。比如我们在URL为/about时不想匹配/:user(或者显示我们的404页面),这该怎么实现呢?以下就是如何使用Switch做到这一点:

这对于动画转换也很有用,因为匹配的Route与前一个渲染位置相同。

所有Switch的子元素都应该是Route或Redirect。只有第一个匹配当前路径的子元素将被呈现。

Route组件使用path属性进行匹配,而Redirect组件使用它们的from属性进行匹配。没有path属性的Route或者没有from属性的Redirect将始终与当前路径匹配。

当在Switch中包含Redirect时,你可以使用任何Route拥有的路径匹配属性:path、exact和strict。from只是path的别名。

如果给Switch提供一个location属性,它将覆盖匹配的子元素上的location属性

下面几种术语也有涉及:

historyobject通常具有以下属性和方法

history对象是可变的,所以我们不推荐从history.location中获取location,推荐从props中获取。这可以确保您对React的假设在生命周期挂钩中是正确的。例如:

位置表示应用程序当前位置,您希望其运行的位置,甚至是之前的位置。看起来像这样

{key:'ac3df4',//notwithHashHistory!pathname:'/somewhere',search:'some=search-string',hash:'#howdy',state:{[userDefined]:true}}路由器将在下面几个地方为您提供位置对象:

它也可以在history.location上获取到,但您不应该使用从history.location上获取到的location对象,因为它是可变的。

位置对象永远不会发生突变,因此您可以在生命周期挂钩中使用它来确定何时进行导航,这对于数据获取和动画处理非常有用。

通常情况下,您只需要传入字符串,但是如果您需要添加一些“位置状态”,只要应用返回到该特定位置,该状态便可用,则可以使用位置对象代替。如果您想基于导航历史而不是仅基于路径来区分UI,这将非常有用。

这样可以防止他们在路由器状态下使用实际位置。这对于动画和待处理的导航很有用,或者在您想要诱使组件在与真实位置不同的位置进行渲染时,这很有用。

可以在下面几个地方获取match对象:

如果Route没有路径,那它将始终匹配,你会获得最接近的父项匹配。这个原理同样适用于withRouter。

解析URL的默认方式是将match.url字符串连接到relative-path。

import{matchPath}from'react-router';constmatch=matchPath('/users/123',{path:'/users/:id',exact:true,strict:false});pathname第一个参数是要匹配的路径名。如果您在服务器上通过Node.js使用,它将是req.path。

静态方法和属性

封装组件的所有无反应的特定静态方法和属性都会自动复制到connected组件。

被包装的组件被公开为返回组件上的静态属性WrappedComponent,它可用于隔离测试组件等等。

THE END
1.哈希吧百度贴吧哈希数据公平公正!本吧热帖: 1-签到 2-哈希 最高 962222 3-哈希最新待遇:111190 4-哈希-上级 41188 5-哈希 最高 负责人 962222 6-p11泵维修 7-哈希二代氨氮增益异常,显色剂正常抽取https://tieba.baidu.com/f?kw=%E5%93%88%E5%B8%8C
2.Base区块23376290区块链浏览器OKLink父区块哈希 0x4786a886525e72d2e3ef70f13f86c3ab7d34741a6a3fec3b70ecda2a9e8970d0 出块者 Base Mainnet 区块大小 58,911 bytes 交易数量 交易166 ,内部交易 2,879 ,代币转账 164 ,NFT 转账 8 块内最高小费 0.000086434926348408 ETH Gas 消耗 29,605,062(14.96%) Gas 限额 198,000,000 每Gas 基础https://www.oklink.com/zh-hans/base/block/23376290
3.北京握奇数据股份有限公司在数字化时代,操作系统不仅是计算机硬件与软件之间的桥梁,更是用户身份和数据安全的第一道防线。随着计算机技术的不断发展和网络攻击手段的日益复杂和多样化,用户数据和系统资源的安全面临着前所未有的挑战,这直接关系到我们的个人隐私、企业机密乃至国家安全,确保操作系统安全登录变得尤为重要。本文将讨论如何通过智能密码https://www.watchdata.com.cn/955
4.国家信息安全漏洞共享平台漏洞描述 ReaQta是一款由IBM Security提供的高级终端安全平台,它利用人工智能和机器学习技术来识别、管理和自动响应网络安全威胁。 Security ReaQta中存在跨站脚本漏洞,该漏洞源于平台中未对用户输入的内容进行过滤验证和输出输转义。攻击者可以利用该漏洞在漏洞页面注入任意Web脚本。 漏洞类型 通用型漏洞 参考链接 https:https://www.cnvd.org.cn/flaw/show/CNVD-2024-47521
5.哈希官网hashcsgo哈希官网(www.tongxinli.com)哈希官网拥有国内外先进的数控装备、检测仪器等800多台套,具有年产70万台缝制设备的能力。哈希官方网站二十多年来始终坚持专注工业缝纫机不动摇,目前产品涵盖平缝系列、包缝系列、绷缝系列、特种机系列、电控电机系列 、自动化缝制单元系列。https://tongxinli.com/
6.Coabltstrike官方教程中文译版本当团队服务器启动时,它将发布团队服务器SSL证书的SHA256哈希值。您应该将此哈希值分发给您的团队成员。当您的团队成员连接时,Cobalt Strike客户端会在向团队服务器进行身份验证之前询问是否验证此哈希。这是防止中间人攻击的重要保护。 Cobalt Strike Client http://it.en369.cn/jiaocheng/1726333838a610945.html
7.ENVI4.8中文汉化补丁安装指南2. 中文界面安装步骤 2.1 安装环境准备 2.1.1 系统兼容性检查 在安装ENVI 4.8汉化补丁之前,首先要确认你的操作系统是否兼容。通常,ENVI官方推荐的操作系统为Windows7或更新版本,以及部分Linux发行版。为确保汉化补丁正常工作,操作系统必须在支持列表之内,并且确保已经安装了ENVI 4.8的官方版本。此外,还需要检查系统环境https://blog.csdn.net/weixin_42589700/article/details/142322245
8.77-Zipis a file archiver with a high compression ratio. Download 7-Zip 24.09 (2024-11-29) for Windows x64 (64-bit): Download 7-Zip 24.09 for another Windows platforms (32-bit x86 or ARM64): License 7-Zipisfree softwarewithopen source. The most of the code is under theGNU LGPLlicenhttp://www.7-zip.org/
9.fHash(文件哈希校验工具)v2.2.3免费中文版fHash fHash(文件哈希校验工具),fHash文件哈希校验工具是一款轻量级便携式文件哈希值校验工具,在日常的工作中遇到需要校验哈希值的时候您一定十分苦恼使用哪款工具好,使用这款fHash文件哈希校验工具让你全程无忧。, 379.00 KBM | 07-27下载介绍 fHash(文件哈希校验工具)是一款轻量级便携式文件哈希值校验工具,在日常https://wap.wmzhe.com/soft-72411.html
10.专业级文件MD5SHAHashMyFiles (效验文件MD5、SHA256等) v2.44 官方中文绿色版 类型:系统安全 大小:130KB 语言:英文软件 时间:2024-02-08 查看详情 到此这篇关于专业级文件MD5、SHA-256/512算法支持的校验工具(文件哈希校验器集合)的文章就介绍到这了,更多相关文件哈希校验器软件内容请搜索脚本之家以前的文章或继续浏览下面的相关文https://www.jb51.net/softjc/926144.html
11.leetcode力扣全球极客挚爱的技术成长平台官方答疑问:是什么原因导致了这两种算法的快慢?答:我用「获取了多少信息」来解释。暴力做法每次拿两个数出来相加,和 target 比较,那么花费 O(1) 的时间,只获取了 O(1) 的信息。而哈希表做法,每次查询都能知道 O(n) 个数中是否有 target?nums[j],那么花费 O(1) 的时间,就获取了 O(n) https://leetcode-cn.com/
12.维普期刊官网维普期中文期刊服务平台,由维普资讯有限公司出品,通过对国内出版发行的14000余种科技期刊、5600万篇期刊全文进行内容分析和引文分析,为专业用户提供一站式文献服务:全文保障,文献引证关系,文献计量分析;并以期刊产品为主线、其它衍生产品或服务做补充,方便专业用户https://qikan.cqvip.com/
13.哈希值验证工具Hasher4.2中文多语免费免费版摘要:Hasher Pro 中文版由大眼仔旭 发布。Hasher Pro 作为一款全面而强大的软件解决方案,旨在为用户提供一种简单而高效的方式来计算和验证数据的哈希值。这款软件不仅支持多种文件格式,还能为自定义字符串计算哈希码,为用户提供了一个强大的工具集,以应对各种数据验证需求。 Hasher Pro 的便携版特性是其一大… http://www.dayanzai.me/hasher-pro.html
14.珠海天力仪表有限公司质量流量计电磁流量计涡轮流量计珠海天力仪表有限公司专业生产销售电磁流量计,质量流量计,涡轮流量计,涡街流量计,气体报警器,差压变送器,压力变送器, 高频雷达物位计,液位计,霍尼韦尔honeywell,西门子模块。电话400-100-7082,0756-8623616https://www.teknik.cn/
15.GLIMODEL33P33中文操作说明书HACH哈希P33PH计关键词 GLIPH计,MODEL33,P33分析仪,哈希P33上传者 上海谷雨环保科技有限公司 立即下载 资料简介 GLI MODEL33|P33中文操作说明书|HACH哈希P33PH计请下载查看中文操作说明书. 谷雨供应GLI MODEL33|P33|HACH哈希P33PH计,如有需要咨询价格! 分享至 相关产品 上泰TS-230 便携式PH/ORP计 Eutech优特1710 台式pH/ORPhttps://www.chem17.com/Technology/detail/44927.html
16.北京排水集团央视新闻走进北京排水集团槐房再生水厂。走进南水北调中线工程终点北京团城湖、北京排水集团槐房再生水厂等地。一同畅游再生水造就的地上湿地公园。 重庆水务环境集团到北京排水集团调研交流2024-11-18 金秋好“丰”景 北排装备公司成功中标两个项目、取得一项资质认证2024-10-12 https://www.bdc.cn/
17.模拟联合国文件写作在哈希结构模拟文件系统的过程中, Hash Table结构中的各个域均设置为整型, 整个哈希表长度为MAXSIZE, 在文件开头处宏定义为8, 初始化数组中含ARRAY=5个数据, 这样的设置均是为了方便编程的实现。在实际的文件系统中, 文件拥有的属性要复杂很多, 包括文件创建时间、修改时间、文件主、文件类型等, 本例旨在分析哈希https://www.360wenmi.com/f/filem158e64k.html
18.首页百瑞环保科技(上海)有限公司我们的团队在中国五个中心城市为客户提供优质的服务。百瑞的实力和团队得到了美国哈希、GF和德国西门子等跨国公司的认可,被授权为这些世界级品牌的中国区代理商。百瑞新扩展的国际化咨询和培训业务正在帮助越来越多的企业和个人客户走向世界。 联系我们 展示项目https://www.bttol.com/
19.技术分享使用Hashcat破解汉语韩语以及俄语等非英语密码-m 0:设置待破解数据的哈希类型,“0”即为MD5。 -a 3:设置攻击模式,“模式3”代表暴力破解。 **_cypher.txt:存放待破解密码哈希的文件。 在破解中文的示例中,我们的参数命令应该如下所示(假设待破解密码为两个汉字): ./hashcat--potfile-disable--outfile-autohex-disable-m0-a3../zh_cypher.txt--hex-https://www.anquanke.com/post/id/84573
20.ProGit中文版(第二版)Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样: 24b9da6552252987aa493b52f8696cd6d3b00373 Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git https://www.progit.cn/
21.Rasa运行服务—Rasa中文官方文档,聊天机器人,上下文管理,多伦你的模型服务必须提供压缩的Rasa模型,并将{“ETag”:<model_hash_string>}作为其头部之一。如果此模型哈希发生更改,Rasa将下载新模型。 Rasa使用包含当前模型哈希的If-None-Match头部向模型服务发送请求。如果模型服务可以提供与你发送的散列不同的模型,则应将其作为zip文件发送,并带有包含新散列的ETag头部。如果没有https://panchuang.net/2019/08/31/rasa_running_the_server/
22.免费给Win10加上右键菜单文件哈希校验功能如果你经常下载文件,比如Windows镜像、Ubuntu等Linux系统或一些软件安装包,都能发现很多网站会标明该文件的 Hash (哈希) 校验信息,常见的有 MD5、SHA-1 的值。 每个文件的哈希值是唯一且无法伪造的,因此下载文件后只要计算一下它的MD5或SHA1值,比对就能知道文件是否下载完整、有没被人修改过或“加料”了。而今天https://www.iplaysoft.com/file-hash-menu.html
23.HashMyFiles2.17中文版HashMyFiles 可讓您計算您系統中的一個或多個檔案的 MD5 和 SHA1 哈希值,並能將所計算出的 MD5、SHA1、CRC32 哈希值連線至 VirusTotal 網站比對來得知此哈希值的安全性。它讓您能夠找到您檔案的哈希值資訊,這些詳細資料可以幫您計算出檔案的完整性。您可以輕鬆地將https://www.coolaler.com/threads/hashmyfiles-2-17-md5_sha1_crc32.330974/
24.比特币实时行情比特币中文咨询网站比特币中国官方网站比特币(bitcoin)中文网站,报道比特币最新的行情、新闻,更新每天比特币兑换价格,是网络上最全面介绍bitcoin(比特币)的网站。http://www.bitebi.net/