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

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

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

(1)新建一个demo:

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

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

代码提供给大家

 import React, { Component } from 'react'

 import{
HashRouter as Router,//路由会带#号
Route,
NavLink
} from "react-router-dom" export default class NewRoute extends Component {
render() {
return (
<div>
<Router>
<Route path="/" render={()=>{
return(
<div>
<p>这行显示的是"/"的组件</p>
<Route path="/a" render={()=>{
return(
<div>
<p>这样显示的是"/a"的组件</p>
<Route path="/a/b" render={()=>{
return(<p>这行显示的是"/a/b"的组件</p>)
}}></Route>
</div>
)
}}></Route>
</div>
)
}}></Route>
</Router>
</div>
)
}
}

(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>
 <Link to={
{
pathname:"/a",
hash:'#name=zhang',
query:{name: 'zhang'},
state:{name:'zhang'}
}
}>点击跳转
</Link>

再次给各位姥爷磕头!

(8)hash(#)

正常的path:

页面给到值:

此时的控制台打印this

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

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

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

(9)search(?)

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

正常的path:

界面:

控制台:

(10)state

代码是这样的:

页面是这样的:

控制台:

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

总结:这次写博客经历了一次大改和一次补充,总的来说我这个人是懒的,克服困难,加油吧

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

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

    这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的 以下内容仅供参考,请慎重使用学习 1.AngularJS路由嵌套 Angularjs本身自带路由模块,可以满足通过不同 ...

  2. react路由的跳转和传参

    1.路由的跳转 一.DOM跳转 在需要跳转的页面导入import {Link} from 'react-router-dom',在需要跳转的地方使用link标签的to属性进行跳转,路由配置文件中导出的 ...

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

    最近在做一个公众号的商城项目,主要用的VUE+MUI,其实今天这个点对于有过项目经验的前端工作者来说是最基础的,但也是必须要掌握的,今天小编主要是记录下传参和跳转的一些总结(仅供参考). 首先我们先上 ...

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

    最近在项目中遇到了需要嵌套指令的情况,指令在嵌套后子指令必须获得父指令中的数据来进行判断,但是在写传参的时候遇到了坑,因此记录下来,防止以后遗忘,个人的肤浅理解,欢迎大家留言讨论 首先,关于direc ...

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

    (1)公共路由裁减 不是每个页面都存在导航,所以不要把导航组件在根组件APP.vue里引入,哪个页面需要,在哪里引入即可. 方案: 哪个页面需要,在哪个页面引入即可 (2)嵌套路由 注意:childr ...

  6. vue中嵌套的iframe中控制路由的跳转及传参

    在iframe引入的页面中,通过事件触发的方式进行传递参数,其中data是一个标识符的作用,在main.js中通过data进行判断,params是要传递的参数 //iframe向vue传递跳转路由的参 ...

  7. 路由的query参数(传参)

    路由组件不会在组件里面放自己组件标签. 案例使用嵌套组件的,但是在Message组件下新增了组件Detail.vue index.html //引入bootstrap.css <link rel ...

  8. vue2.0路由(跳转和传参)经典介绍

    声明式 <router-link :to="...">编程式router.push(...) router.push('home')                 / ...

  9. Vue总结第五天:vue-router (使用模块化(创建Vue组件)机制编程)、router-link 标签的属性、路由代码跳转、懒加载、路由嵌套(子路由)、路由传递数据、导航守卫)

    Vue总结第五天:vue-router ✿ 路由(器)目录: □  vue中路由作用 □  vue-router基本使用 □  vue-router嵌套路由 □  vue-router参数传递 □  ...

随机推荐

  1. 用来更新服务的bat 脚本

    net stop XK.Service echo "已停止服务,开始更新!" set /a t = echo %t% :loop 127.1 >nul set /a t = ...

  2. hdu 6567 Cotree 树的重心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6567 #include<iostream> #include<algorithm&g ...

  3. 简述http协议及抓包分析

    1:HTTP请求头和响应头的格式 1:HTTP请求格式:<request-line><headers><blank line>[<request-body&g ...

  4. 假期续命充电——简单上手tesorflow2 框架

    谈到深度学习,就不得不谈到tensorflow 在tensorflow之后出了2.0版本,相比之前有了很大的改变,趁着假期赶紧冲冲冲! 稍微学习了一些基础,做一个自我总结,作为一些基础的知识不再过多重 ...

  5. AVR单片机教程——串口接收

    本文隶属于AVR单片机教程系列.   上一讲中,我们实现了单片机开发板向电脑传输数据.在这一讲中,我们将通过电脑向单片机发送指令,让单片机根据指令控制LED.这一次,两端的TX与RX需要交叉连接,单片 ...

  6. AVR单片机教程——PWM调光

    本文隶属于AVR单片机教程系列.   PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比.让引脚输出高电平点亮LED,占空比就是100%. 在驱动数码管时 ...

  7. leetcode 最大水池

    leetcode 11题 水池最大容积 题目描述 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 ( ...

  8. Linux.cp命令总提示是否覆盖

    执行cp命令,其实是默认执行了cp -i命令的别名,因此总提示是否覆盖. 修改~/.bashrc,注释“alias cp='cp -i'”即可. [root@xxxx test]# vi ~/.bas ...

  9. [题解]CSP2019 Solution - Part A

    至于为什么是 \(\text{Part A}\) 而不是 \(\text{Day 1}\) 那是因为 Day1 T3 还没改 (那这六题的 \(\text{solution}\) 就按难度顺序写吧) ...

  10. 从maven安装配置到idea成功创建maven项目

    在文章开始之前,我还是想安抚下你躁动的心情,说实话这一套操作下来的确花了我不少时间,的确头疼. 不过对于现在在看文章的你,我还是想提倡多多尝试,耐心哈,别砸键盘......废话少说切入正题 一. ma ...