我的一个React路由嵌套(多级路由),路由传参之旅

在上一篇react路由之旅中,我们简单地配置了react,进行了react路由及相关知识的学习,引入以及实现一个局部跳转的功能,接下来就是深入学习路由的嵌套以及传参,这是工作中主要用要的。

我的react已经配置了redux(见我的redux之旅),所以这是在引入的插件里做的演示。

从App组件跳转到NewRoute组件(需要简单的路由跳转,点击自己预习)

(1)新建一个demo:

这里使用了render方式在一个文件中模拟了多个组件的效果 代码只为讲解使用在真实开发中尽量不要这样写代码的。

这段代码中,我们模拟了3层路由,路径和界面如下:

代码提供给大家

 1 import React, { Component } from ‘react‘
 2
 3 import{
 4     HashRouter as Router,//路由会带#号
 5     Route,
 6     NavLink
 7 } from "react-router-dom"
 8
 9 export default class NewRoute extends Component {
10     render() {
11         return (
12             <div>
13                 <Router>
14                     <Route path="/" render={()=>{
15                         return(
16                             <div>
17                                 <p>这行显示的是"/"的组件</p>
18                                 <Route path="/a" render={()=>{
19                                     return(
20                                         <div>
21                                             <p>这样显示的是"/a"的组件</p>
22                                             <Route path="/a/b" render={()=>{
23                                                 return(<p>这行显示的是"/a/b"的组件</p>)
24                                             }}></Route>
25                                         </div>
26                                     )
27                                 }}></Route>
28                             </div>
29                         )
30                     }}></Route>
31                 </Router>
32             </div>
33         )
34     }
35 }

(2)用子组件形式实现上面的demo:

效果如下:

如果你对现在的页面效果不满意,可以添加多个link,并且在Switch中添加多个路由,真实还原网站。

 (3)实际开发中:

App.js中代码:

indexPage.js中代码:

userPage.js中的代码:

这是一套基本的业务流程,不仅涉及到界面跳转,嵌套,还有网页不存在的重定向,它们之间是向下调用的关系 App.js中 path = / 会调用 indexPage.js indexPage.js path = /user 会调用 userPage.js userPage.js path = /user/one 会调用最终显示组件。

(4)我们打印一下shopPage的this,看看里面有什么:

想得到当前的路径,用this.props.match.url是个不错的选择

(5)多级路由中地址的拼接:

拼接的作用,可以随意切换组件间的调用,比如随时在/b之前再插入一层地址,也可以直接整个组件移动到其它路径之下。

我们现在在这里呢,复制了一份userPage界面,命名为userPage1,把他的路径命名为c,并把b组件引入了userPage和userPage1:

userPage组件:

userPage1组件:

此时此刻,在各自的路径下打开b组件的截图:

(6)我们的组件,有时候只是一个模板,需要接受传值,才能起到自己的作用,然后就说一下组件传值:

路由传值的常用方式:params(/)、hash(#)、search(?)、state

(7)params(/)

● 上面代码中是在定义路由组件中

● 注意path地址中斜杠后面 :id

● 其中:冒号可以理解为即将声明一个变量

● 变量的名字是id

拓展内容,参数正则匹配

● /:id?后面?号表示可有可无

● /name_:id前面加name必须匹配/name_XXX

● /:id(\d+)括号中的内容为正则,这里表示:id必须是数字才会匹配

取值需要在对应的component定义的组件 UserPage中使用 this.props.match.params.id 地址栏输入上图的地址(/id001)取到的结果就是 id001

在此为我的粗心表示歉意,直到我最后用state传值菜发现,没有给大家讲Link,而是直接在浏览器的网址直接写了数据,然后让大家看的控制台,仅仅是取了一个数据,这次重新编辑给大家补上Link的代码,大家心里想象截图上有一个Link就好了,当然,没有link,直接在网址里加入数据是没错的,只不过心里膈应,怕大家看不懂。如果你要把这行代码补到 组件,记得外面包一层Router

<Link to={ ‘ /a/ ‘ + ‘ id001 ‘ }  activeClassName=‘active‘>点击跳转</Link>

1 <Link to={
2 {
3 pathname:"/a",
4 hash:‘#name=zhang‘,
5 query:{name: ‘zhang‘},
6 state:{name:‘zhang‘}
7  }
8 }>点击跳转
9  </Link>

再次给各位姥爷磕头!

(8)hash(#)

正常的path:

页面给到值:

此时的控制台打印this

● 在regPage.js页面中直接使用 this.props.location.hash 取值

● 打印结果是地址栏包括#号及后面所有的值

● 该方式需要在对键值对进行处理相对比较麻烦

(9)search(?)

用法优缺点问题与上面的hash十分类似

正常的path:

界面:

控制台:

(10)state

代码是这样的:

页面是这样的:

控制台:

在regPage.js组件中通过 this.props.location.state取值

原文地址:https://www.cnblogs.com/aishangJava/p/12348755.html

时间: 2024-11-06 03:43:55

我的一个React路由嵌套(多级路由),路由传参之旅的相关文章

AngularJS“多重路由”嵌套模块——AngularJS“路由”嵌套学习资料教程

这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 1.AngularJS路由嵌套 Angularjs本身自带路由模块,可以满足通过不同的 URL 访问不同的内容,当然实际应用为在单页面点击不同按钮等加载不同页面 之前有关于angular-route路由的介绍,但是只能一层路由嵌套,如果需要多重嵌套就是不够用了 UI-Router作为AngularUI为开发者提供的其中实用的一个模块,根据URL状态组织和控制界面UI的渲染,不是仅仅

关于vue路由对不同界面进行传参及跳转的总结

最近在做一个公众号的商城项目,主要用的VUE+MUI,其实今天这个点对于有过项目经验的前端工作者来说是最基础的,但也是必须要掌握的,今天小编主要是记录下传参和跳转的一些总结(仅供参考). 首先我们先上代码吧! <router-link :to="{path:'/editaddress',query:{ id:item.id }}"> <div class="top_left_center"> <img src="/static

vue路由对不同界面进行传参及跳转的总结

最近在做一个公众号的商城项目,主要用的VUE+MUI,其实今天这个点对于有过项目经验的前端工作者来说是最基础的,但也是必须要掌握的,今天小编主要是记录下传参和跳转的一些总结(仅供参考). 首先我们先上代码吧! <router-link :to="{path:'/editaddress',query:{ id:item.id }}"> <div class="top_left_center"> <img src="/static

angular 实例笔记之嵌套指令间的传参

最近在项目中遇到了需要嵌套指令的情况,指令在嵌套后子指令必须获得父指令中的数据来进行判断,但是在写传参的时候遇到了坑,因此记录下来,防止以后遗忘,个人的肤浅理解,欢迎大家留言讨论 首先,关于directive的scope绑定作用域网上已经有一大堆了,无非就是scope的三种绑定方式,@,=和&,在设置上对应的绑定属性后即可从父作用域中继承并创建一个独立作用域,如 //html中 <my-dir name="lvyi"></my-dir> //js中 ap

vue-router路由嵌套与二级路由重定向

(1)公共路由裁减 不是每个页面都存在导航,所以不要把导航组件在根组件APP.vue里引入,哪个页面需要,在哪里引入即可. 方案: 哪个页面需要,在哪个页面引入即可 (2)嵌套路由 注意:children下的path无需/,它会自动补全匹配 接下来在相应页面渲染二级嵌套路由即可 (3)嵌套路由重定向 使用redirect属性实现重定向 (4)三级||多级路由 与上面类似,往children下继续添加即可 . 原文地址:https://www.cnblogs.com/jianxian/p/1196

Vue入门十三、路由的传参和取参

1.查询参login?id=12345 配置:(传参):to="{name:'login', query:{id:'loginid'}}"获取:(取参)this.$route.query.id 2.路由参数 配置:(传参):to="{name:'login', params:{id:'loginid'}}"获取:(取参)this.$route.params.id 3.路径参数register/registerid/info 配置:(传参):to="{nam

angular 路由跳转以及传参

1. 路由跳转方式一: /路由?id='001' 方式 -- queryParams 方式 路由配置:{ path: 'details', component: bookDetailsComponent }    a.  指令跳转: <a [routerLink]="['/details']" [queryParams]="{id: item.id}" style="color:blue; font-size: 12px;cursor:pointer

我的一个react路由之旅(步骤及详图)

今天开始react一个重要部分的xiao~习,路由~(过程截图,最后附代码) 以下代码只能骗糊涂蛋子,没错,就是我自己,不要打算让我敲出多高级的东西~ 理论性知识几乎没有,请不要打算让我给你说原理啥的,原理性的东西,网上很多,我现在搬砖学习很开心,勿忘初心~ (1)首先,你确定你安装了react环境,这第一步难度系数1,菜鸟级别的不演示了 (2)接下来,你要是用react路由,需要安装路由插件 1 npm install react-router-dom --save-dev //这里可以使用c

Vue学习手记03-路由跳转与路由嵌套

1.路由跳转 添加一个LearnVue.vue文件, 在router->index.js中 引入import Learn from '@/components/LearnVue' 在touter中添加路由说明 export default new VR({ routes:[ { path:"/hello", name:"HelloWorld", component:HelloWorld }, { path:"/learn", name:&q