介绍

react-router被分为以下几部分:

  • react-router是浏览器和原生应用中的通用部分。

  • react-router-dom是用于浏览器的。

  • react-router-native是用于原生应用的。

react-router是核心部分。react-router-dom提供了浏览器使用需要的定制组件。react-router-native则专门提供了在原生移动应用中需要用到的部分。

安装

开发web引用只需要安装react-router-dom

npm install react-router-dom --save

三个props

history

History是React Router的两大重要依赖之一,在不同的JavaScript环境中,history以多种形式实现了对于session历史的管理。

history对象通常会具有以下属性和方法:

  • length - number类型,表示history堆栈的数量。

  • action - string类型,表示当前的动作。比如popreplacepush

  • location - object类型,表示当前的位置。

  • push(path, [state]) - function类型,在history堆栈顶加入一个新的条目。

  • replace(path, [state]) - function类型,替换在history堆栈中的当前条目。

  • go(n) - function类型,将history堆栈中的指针向前移动n

  • goBack() - function类型,等同于go(-1)

  • goForward() - function类型,等同于go(1)

  • block(promt) - function类型,阻止跳转。

match

match对象包含了<Route path>如何与URL匹配的信息。match对象包含以下属性:

  • params - object类型,表示路径参数,通过解析URL中动态的部分获得的键值对。

  • isExact - 为true时,整个URL都需要匹配。

  • path - string类型,用来做匹配的路径格式。

  • url - string类型,URL匹配的部分。

获取match对象:

  • 在Route component中,以this.props.match方式。

  • 在Route render中,以({ match }) => ()方式。

  • 在Route children中,以({ match }) => ()方式。

location

location是指当前的位置,下一步的位置,或者之前所在的位置。location的属性:

  • pathname - string类型,URL路径。

  • search - string类型,URl中查询字符串。

  • hash - string类型,URL的hash分段。

  • state - string类型,表示location中的状态,只会出现在browser history和memory history的环境里。

获取location对象的方式:

  • 在Route component中,以this.props.location的方式获取。

  • 在Route render中,以({ location }) => ()的方式获取。

  • 在Route children中,以({ location }) => ()的方式获取。

  • 在withRouter中,以this.props.location的方式获取。

路由组件

Router

针对不同功能和平台,有集中不同的子类组件:

  • <BrowserRouter> 浏览器的路由组件

  • <HashRouter> URL格式为Hash路由组件

  • <MemoryRouter> 内存路由组件

  • <NativeRouter> Native的路由组件

  • <StaticRouter> 地址改变的静态路由组件

BrowserRouter组件

BrowserRouter主要用于浏览器中,也就是web应用中。当点击程序中的一个连接之后,BrowserRouter就会找出与这个URL匹配的Route,并将对应的组件渲染出来。BrowserRouter是用来管理组件的,应用程序的组件作为它的子组件而存在。

BrowserRouter组件提供的属性:

  • basename - string类型,路由器 的默认根路径。

  • forceRefresh - bool类型,在导航的过程中整个页面是否刷新。

  • getUserConfirmation - function类型,当导航需要确认时执行的函数。默认是:window.confirm

  • keylength - number类型,location.key的长度。默认是6。

  • children - node类型,渲染单一子组件。

HashRouter

HashRouter使用的URL的hash来保持UI和URL的同步。使用hash的方式记录导航历史不支持location.keylocation.state。跟BrowserRouter类似,也有basenamegetUserConfirmationchildren属性,而且是一样的。

MemoryRouter

主要用在ReactNative这种非浏览器的环境中,因此直接将URL的history保存在了内容中。StaticRouter主要用于服务器端渲染。

Route组件

<Route>组件是react router的最重要的组件,当location与Route的path匹配时渲染Route中的Component。如果多个Route匹配,那么这些Route的Component都会被渲染。

Route组件的属性:

  • path - 字符串类型,它的值就是用来匹配url的。

  • component - 它的值是一个组件,在path匹配成功之后会渲染这个组件。

  • exact - 指明这个路由是不是排他匹配。

  • strict - 指明路径只匹配以斜线结尾的路径。

可以代替component属性的属性:

  • render - function类型,Route会渲染这个function的返回值,可以添加一些副作用。

  • children - 即使没有匹配路径的时候,也总是会渲染。我们可以根据match参数来决定匹配的时候渲染什么,不匹配的时候渲染什么。

所有路由中指定的组件将被传入以下三个props:locationmatchhistory

Link组件

使用<Link>可以在React应用的不同页面之间跳转,只会加载页面里和当前url可以匹配的部分。<Link>组件需要用到to属性,用来指明目标组件的地址,地址可以是一个字符串,也可以是一个location对象。

replace属性设置为true时,点击链接后将使用新地址替换掉访问历史记录里面的原地址。设置为false时,点击链接后将在原有访问历史的基础上添加一个新纪录。

NavLink是一个特殊的Link,可以使用activeClassName来设置Link被选中时被附加的class,使用activeStyle来配置被选中时应用的样式。exact属性要求路径完全匹配才会附加class和style。

Redirect组件

当这个组件被渲染时,location会被重写为Redirect的to制定到新location。它的一个用途是登陆重定向,比如用户在点击登录按钮并通过验证之后,将页面跳转到个人主页。

Switch组件

渲染匹配地址(location)的第一个<Route>或者<Redirect>。相反的,每一个包含匹配地址的(location)的<Route>都会被渲染。

React-router使用的更多相关文章

  1. [Redux] Filtering Redux State with React Router Params

    We will learn how adding React Router shifts the balance of responsibilities, and how the components ...

  2. [转] React Router 使用教程

    PS:react-route就是一个决定生成什么父子关系的组件,一般和layout结合起来,保证layout不行,内部的子html进行跳转 你会发现,它不是一个库,也不是一个框架,而是一个庞大的体系. ...

  3. [Redux] Navigating with React Router <Link>

    We will learn how to change the address bar using a component from React Router. In Root.js: We need ...

  4. [Redux] Adding React Router to the Project

    We will learn how to add React Router to a Redux project and make it render our root component. Inst ...

  5. React Router基础使用

    React是个技术栈,单单使用React很难构建复杂的Web应用程序,很多情况下我们需要引入其他相关的技术 React Router是React的路由库,保持相关页面部件与URL间的同步 下面就来简单 ...

  6. 最新的chart 聊天功能( webpack2 + react + router + redux + scss + nodejs + express + mysql + es6/7)

    请表明转载链接: 我是一个喜欢捣腾的人,没事总喜欢学点新东西,可能现在用不到,但是不保证下一刻用不到. 我一直从事的是依赖angular.js 的web开发,但是我怎么能一直用它呢?看看最近火的一塌糊 ...

  7. react router 4.0以上的路由应用

    thead>tr>th{padding:8px;line-height:1.4285714;border-top:1px solid #ddd}.table>thead>tr& ...

  8. React Router 使用教程

    一.基本用法 React Router 安装命令如下. $ npm install -S react-router 使用时,路由器Router就是React的一个组件. import { Router ...

  9. 关于react router 4 的小实践

    详细代码栗子:https://github.com/wayaha/react-dom-CY clone然后 npm install npm start 分割线 1.这个项目使用create-react ...

  10. React Router 4.x 开发,这些雷区我们都帮你踩过了

    前言 在前端框架层出不穷的今天,React 以其虚拟 DOM .组件化开发思想等特性迅速占据了主流位置,成为前端开发工程师热衷的 Javascript 库.作为 React 体系中的重要组成部分:Re ...

随机推荐

  1. ASP.NET Core 2.x 到 3.1 迁移指南

    一.前言 今日(2019/12/4).NET Core 3.1 正式发布了,ASP.NET Core 3.1 随之发布,这次 3.0 到 3.1经过了两个月的短周期,并没有增加重大的功能,主要是对 3 ...

  2. C#通过反射调用类及方法

    反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类).下面演示一下通过反射调用类及方法: 1.新建一个类,命名为:ReflectionHelper,代码如下: #region 创 ...

  3. JS基础语法---String(字符串的案例)

    练习1: var str = "我的宝宝最可爱,声音嗲嗲的"; var key = "可爱"; //先获取要截取的字符串的索引位置 var index = st ...

  4. django的使用INNODE的方式,排除错误MySQL Strict Mode is not set for database connection 'default'

    出现如下错误: 解决办法: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mxshop', 'HO ...

  5. 用Loading 加载中的整页加载来做蒙层

    总结:遇见的bug 如何写一个蒙层 最初我打算的是自己写一个蒙层,但是写出来后, 不能够将整个屏幕全部覆盖.只能够覆盖 除[顶部导航] 和[左侧菜单栏] 于是我就使用了element-ui中的 [Lo ...

  6. 【使用篇二】Lombok的介绍与使用(16)

    Lombok通过简单注解来实现精简代码来达到消除冗长代码的目的.它能够提高编码效率.使代码更简洁.消除冗长代码.避免修改字段名时忘记修改方法名. 一.Lombok注解 Lombok主要常用的注解有: ...

  7. java之instanceof操作符

    a intanceof A:判断a是否是类A的的一个实例,返回值为boolean public class Person extends Object{} public class Student e ...

  8. ESP8266源码分析--打印的基本用法

    缘由: 物联网小芯片中,很多都不是特别复杂,绝大多数问题都需要靠串口打印就能定位的.所以,串口打印是一个非常靠谱的玩意.一定要好好的利用.ESP8266的打印模板设计的特别好,这里我就列出来,供大家参 ...

  9. JavPlayer:AI破坏马赛克,大量马赛克破坏版影片流出

    这是最近几个月业界讨论比较火的话题,发酵到现在, 终于可以给大家总结下最近的马赛克破坏版影片到底是怎么回事? 马赛克破坏版,简单讲就是利用AI技术,在打有马赛克影片的马赛克基础上进行修复操作, 来实现 ...

  10. 深入理解 Java 注解

    深入理解 Java 注解 本文内容基于 JDK8.注解是 JDK5 引入的,后续 JDK 版本扩展了一些内容,本文中没有明确指明版本的注解都是 JDK5 就已经支持的注解.