刚刚接触react不久,发现在项目中的路由配置中会有switch和exact的使用,现总结如下

switch  为了解决route的唯一渲染(仅仅渲染一个路由路径)出现的

<Switch>是唯一的因为它仅仅只会渲染一个路径。相比之下(不使用<Switch>包裹的情况下),每一个被location匹配到的<Route>将都会被渲染。认真思考一下图1-1的代码:

 
 
图1-1

如果URL是/about, 那么<About>,<User>,和<NoMatch>将都被渲染,因为它们的path全都被匹配到。设计如此,允许我们通过<Route>s以多种方式去构建我们的应用,比如:sidebars 和 breadcrumbs,bootstrap tabs,等。

然而,有时,我们只想选择性的渲染一个<Route>。如果URL是/about我们并不想也匹配到/:user(或者显示给我们404页面)。参阅图1-2,看看如何使用<Switch>来处理这个问题的:

图1-2

现在,如果URL是/about,<Switch>将会开始寻找相匹配的<Route>。<Route path="/about" />将会被匹配到,紧接着 <Switch>会停止继续匹配并且渲染<About>。同理,如果URL是/michael,那么<User>将会被渲染。

exact的作用

再看下面一组图

代码:

 

 
图2-4

看到运行结果四(观图2-6),我不禁呵呵了一下,感叹世界真奇妙。此时,我们不妨暮然回首,其实答案就在原文翻译的第一句话,对,就像那句换说的一样,<Switch>只找到第一个被location匹配到的<Route>就立即停止继续匹配,并且把它渲染出来。"/second"同时和"/","/second/"相匹配,因为先匹配到了前者,所以只有页面一被渲染。

验证一下,把两者前后顺序进行调整,请看下面一组图

代码:

 

图2-7

 
图2-9

经过<Switch>的使用及顺序的调整,我们终于得到了想要的结果,可是这样就满足了么?难道每次写路由的时候都要严格控制书写顺序吗?答案当然是否定的!

<Route>有个exact属性当<Route>添加exact属性后只有URL和该<Route>的path属性进行精确比对后完全相同该<Route>才会被渲染。

那么,我们把<Switch>和exact属性结合起来使用呢?请看最后一组图

代码:

 

 
图2-10

链接:https://www.jianshu.com/p/ed5e56994f13

react的路由中的switch和exact的使用的更多相关文章

  1. react动态路由以及获取动态路由

    业务中会遇到点击列表跳转到详情页, 1.在index.js修改我们的跟组件 新建router2的文件 import React from 'react' import { HashRouter as ...

  2. react前置路由守卫

    react中一切皆组件-- 目标:自定义user界面的前置路由守卫,当用户点击要进入user组件时,路由守卫发起判断,如果条件满足则进入,否则跳转至login组件. .入口文件index.js中代码如 ...

  3. React初识整理(四)--React Router(路由)

    官网:https://reacttraining.com/react-router 后端路由:主要做路径和方法的匹配,从而从后台获取相应的数据 前端路由:用于路径和组件的匹配,从而实现组件的切换. 如 ...

  4. react的路由权限控制

    在使用路由的时候,有的时候我们的界面只能够在登录之后才可以看的到,这个时候就需要使用路由权限控制了 找了资料发现一个就是我使用的方法,一个是高阶组件. 原谅菜鸟看不太懂不会使用高阶组件………… 首先在 ...

  5. 链接进入react二级路由,引发的子组件二次挂载

    这个问题很怪,我两个二级路由从链接进入的时候,会挂载两次子组件. 从链接进入,是因为新页面在新标签页打开的. 有子组件是因为公共组件提取 同样的操作,有一些简单的二级路由页面,就不会挂载两次. 讲道理 ...

  6. react之路由

    功能:让用户从一个视图(组件)导航到另一个视图(组件) 前端路由是一套映射规则,在React中,是URL路径与组件的对应关系 使用React路由简单来说,就是配置路径和组件 路由的使用 1.安装路由 ...

  7. react + antiDesign开发中遇到的问题记录

    react + antiDesign开发中遇到的问题记录 一:页面中子路由失效: antiDesign的官方实例中,会把路由重复的地方给去重,而且路由匹配模式不是严格模式.所以我们需要在util.js ...

  8. React的路由react-router

    意思是:当你写一个web应用时候,应噶install的是react-router-dom,同样的,当你想写一个Native应用时候,需要install的是react-router-native,这两个 ...

  9. < react router>: (路由)

    < react router> (路由): 思维导图: Atrial   文件夹下的index.js 文件内容: import React, { Component } from 'rea ...

随机推荐

  1. 40-用 volume container 共享数据

    volume container 是专门为其他容器提供 volume 的容器.它提供的卷可以是 bind mount,也可以是 docker managed volume.下面我们创建一个 volum ...

  2. CK:User mode Bus Error(用户空间操作内核地址导致的异常)

    关键词:VEC_ACCESS.coredump.LR.PC等. CK中存在一种VEC_ACCESS异常,可能原因是用户空间访问了内核空间,还有一种是内核访问不存在的总线地址. 下面简单构造VEC_AC ...

  3. Mybatis的动态sql以及分页

    mybatis动态sql If.trim.foreach <select id="selectBooksIn" resultType="com.jt.model.B ...

  4. 3. java 方法入门

    一.方法定义 1. 定义格式 public static void 方法名称(){ 方法体 } 1. 方法名称:命名和变量一致,小驼峰式 2. 方法体:大括号中可以包含任意条语句 注意事项: 1. 方 ...

  5. 201871010116-祁英红《面向对象程序设计(java)》第十周学习总结

    博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...

  6. mysql中group by 使用

    问题描述 我现在需要查询表test,里面需要安装字段a 进行分组.分组之后还有按照b字段最大的.还要查询出字段c. 我先在使用的数据库是mysql8.0 解决 需注意: group by 分组的时候是 ...

  7. 【PAT甲级】Public Bike Management 题解

    题目描述 There is a public bike service in Hangzhou City which provides great convenience to the tourist ...

  8. HTML连载49-清除浮动的第三种方式(内外墙法)

    一.清除浮动的第三种方式 1.隔墙法有两种​如下:外墙法和内墙法​.​ 2.外墙法 (1)在两个盒子中间添加一个额外的块级元素 (2)给这个额外添加的块级元素设置:clear:both;属性 注意点: ...

  9. Web自动化测试Selenium 学习笔记(一)

    1.Web自动化测试简介自动化基础:自动化用例编写.Selenium优势及原理.自动化环境搭建Selenium基础:常见8大元素定位(表格).常见元素处理.下拉框元素处理.不同窗口切换.元素进阶.元素 ...

  10. SpringMVC拦截器和数据校验

    1.什么是拦截器 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权限验证.记录请求 ...