React-Router是React项目中处理路由的库。

1. HashRouter

通过hashchange监听路由的变化,通过window.location.hash赋值触发监听的变化。

本质是一个react中的context对象,向下传参,传递参数有三种:

1. location

有四个属性:state, pathname, search, hash

state: 可以用来在路由中传递参数

pathname:  指定路由

2. history

主要有两个方法:

push: 可以实现跳转路由

// 传递对象
this.props.history.push({pathname: url, state: xxx})
// 传递路由
this.props.history.push(url)

3.match

通过该字段可以知道当前组件的路由是否和地址栏中路由相同。

应用:

实现单击后菜单呈现选中状态
import React, { Component } from 'react'
import { Route, Link } from '../react-router-dom'; export default function ({to, exact, ...rest}) {
// 实现单击后链接呈现选中状态
return (
<Route
path={to}
exact={exact}
children={(props) => {
return <Link to={to} className={props.match ? 'active' : ''}>{rest.children}</Link>
}}
/>
)
}

2.BrowserRouter

通过onpopstate事件监听通过点击前进后退/调用back()等方法的操作。通过改写pushState方法,监听页面中路由的变化。

其他和HashChange基本相同

3. Route

用于渲染指定路由的组件。children属性时,可以不指定路由。

用于匹配路由: path, exact

path: 指定路由

exact: 严格匹配

有三个属性用于渲染组件:

1. component

当path值匹配时,渲染component中的组件

2.render

当path匹配时,可以自定义渲染逻辑。相当于React中的render props复用组件功能。

如:受保护路由的实现。

import React from 'react';
import Route from '../react-router-dom/Route';
import { Redirect } from '../react-router-dom'; export default function({component:Component, ...rest}) {
return (
<Route {...rest}
render={(props) => localStorage.getItem('login') ?
<Component {...props} />
: <Redirect to={{pathname: '/login', state: {from: props.location.pathname}}} />}
/>
)
}

3.children

无论路由是否匹配,都会渲染。

如: 菜单的选中状态

import React, { Component } from 'react'
import { Route, Link } from '../react-router-dom'; export default function ({to, exact, ...rest}) {
// 实现单击后链接呈现选中状态
return (
<Route
path={to}
exact={exact}
children={(props) => {
return <Link to={to} className={props.match ? 'active' : ''}>{rest.children}</Link>
}}
/>
)
}

4. Link

to属性有两种参数形式

1. 对象类型

<Link to={{pathname: url, state: {xx:xx}}}/>

2. 字符串

<Link to="/user">

5. Switch/Redirect

Switch(只匹配一个路由)和Redirect(前面的都不匹配时走这个路由)配合使用。

重定向方式有两种:

1)组件重定向: <Redirect />

2)方法重定向 this.props.history.push()

6. withRouter

对于非Route加载的组件,想要使用从Route中传递的history,location,match属性,使用该方法。

其本质是个高阶组件。

import React from 'react';
import Route from './Route'; export default function(WrappedComponent) {
return (props) => <Route component={WrappedComponent} />
}

7. Prompt

1. 属性

1. when

根据该属性进行路由的拦截。当为true时,弹出一个下confirm框。

2.message

用于显示拦截的信息, 本质是个函数。

2. 原理

基于history.push()和history.block()方法。

React-Router常见API的更多相关文章

  1. React Router API文档

    React Router API文档 一.<BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件)的<Rou ...

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

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

  3. [Web 前端] 你不知道的 React Router 4

    cp from https://segmentfault.com/a/1190000010718620 几个月前,React Router 4 发布,我能清晰地感觉到来自 Twitter 大家对新版本 ...

  4. [转] React Router 使用教程

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

  5. React Router基础使用

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

  6. React Router 使用教程

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

  7. React router动态加载组件-适配器模式的应用

    前言 本文讲述怎么实现动态加载组件,并借此阐述适配器模式. 一.普通路由例子 import Center from 'page/center'; import Data from 'page/data ...

  8. React Router教程

    React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-router-dom 应用于浏览 ...

  9. React Router 用法

    React Router 用法 一.DEMO import React from "react"; import { HashRouter as Router, Route, Li ...

  10. react router @4 和 vue路由 详解(全)

    react router @4 和 vue路由 本文大纲: 1.vue路由基础和使用 2.react-router @4用法 3.什么是包容性路由?什么是排他性路由? 4.react路由有两个重要的属 ...

随机推荐

  1. python 之 面向对象(元类、__call__、单例模式)

    7.13 元类 元类:类的类就是元类,我们用class定义的类来产生我们自己的对象的,内置元类type是用来专门产生class定义的类 code=""" global x ...

  2. 异常处理和UDP Socket套接字

    一.异常处理 1.什么是异常处理: 程序在运行过程中出现了不可预知的错误,并且该错误没有对应的处理机制,那么就会以异常的形式表达出来,造成的影响就是整个程序无法再正常进行. 2.异常的结构: 1.异常 ...

  3. Vivado关联Modelsim进行联合仿真

    Vivado自带仿真工具,但是有点慢,关联Modelsim联合仿真是最好的,注意Modelsim必须是10.7以上版本. 1.安装并成功破解Modelsim 10.7. 2.打开Vivado,点击 T ...

  4. Docker之数据卷(Data Volumes)操作

    目的: 前言 Docker宿主机和容器之间文件拷贝 数据卷 数据卷容器 前言 Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享, ...

  5. mapreduce课堂测试结果

    package mapreduce; import java.io.IOException; import java.util.StringTokenizer; import org.apache.h ...

  6. java基础 构造方法

    /** * 继承关系中,父子类构造方法的访问特点 * * 1.子类构造方法中有一个默认隐含的"super()"调用,所以一定是先调用父类构造,后执行的子类构造 * 2.子类构造可以 ...

  7. Eclipse的常用设置。

    用惯了VS,再回过去用Eclipse真是一件痛苦的事.so,在这里记录下使用过程中的一些设置以做备忘. 1.代码自动提示 在我们忘记方法名或者想偷懒时,代码自动提示很管用.不过Eclipse默认是输入 ...

  8. UIView与CALayer的区别,很详细(基础教学拓展)转

    研究Core Animation已经有段时间了,关于Core Animation,网上没什么好的介绍.苹果网站上有篇专门的总结性介绍,但是似乎原理性的东西不多,看得人云山雾罩,感觉,写那篇东西的人,其 ...

  9. 【转载】C#中Convert.ToInt32方法将字符串转换为Int32类型

    在C#编程过程中,可以使用Convert.ToInt32方法将字符串或者其他可转换为数字的对象变量转换为ToInt32类型,Convert.ToInt32方法有多个重载方法,最常使用的一个方法将字符串 ...

  10. js继承(十)

    一.原型链继承[子构造函数的原型对象是父构造函数的实例][对原型属性和方法的继承]1.每个构造函数[prototype]都有一个原型对象,原型对象中都包含一个指向构造函数的指针[constructor ...