React-Router常见API
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的更多相关文章
- React Router API文档
React Router API文档 一.<BrowserRouter> 使用HTML5历史记录API(pushState,replaceState和popstate事件)的<Rou ...
- React Router 4.x 开发,这些雷区我们都帮你踩过了
前言 在前端框架层出不穷的今天,React 以其虚拟 DOM .组件化开发思想等特性迅速占据了主流位置,成为前端开发工程师热衷的 Javascript 库.作为 React 体系中的重要组成部分:Re ...
- [Web 前端] 你不知道的 React Router 4
cp from https://segmentfault.com/a/1190000010718620 几个月前,React Router 4 发布,我能清晰地感觉到来自 Twitter 大家对新版本 ...
- [转] React Router 使用教程
PS:react-route就是一个决定生成什么父子关系的组件,一般和layout结合起来,保证layout不行,内部的子html进行跳转 你会发现,它不是一个库,也不是一个框架,而是一个庞大的体系. ...
- React Router基础使用
React是个技术栈,单单使用React很难构建复杂的Web应用程序,很多情况下我们需要引入其他相关的技术 React Router是React的路由库,保持相关页面部件与URL间的同步 下面就来简单 ...
- React Router 使用教程
一.基本用法 React Router 安装命令如下. $ npm install -S react-router 使用时,路由器Router就是React的一个组件. import { Router ...
- React router动态加载组件-适配器模式的应用
前言 本文讲述怎么实现动态加载组件,并借此阐述适配器模式. 一.普通路由例子 import Center from 'page/center'; import Data from 'page/data ...
- React Router教程
React Router教程 React项目的可用的路由库是React-Router,当然这也是官方支持的.它也分为: react-router 核心组件 react-router-dom 应用于浏览 ...
- React Router 用法
React Router 用法 一.DEMO import React from "react"; import { HashRouter as Router, Route, Li ...
- react router @4 和 vue路由 详解(全)
react router @4 和 vue路由 本文大纲: 1.vue路由基础和使用 2.react-router @4用法 3.什么是包容性路由?什么是排他性路由? 4.react路由有两个重要的属 ...
随机推荐
- Django-12-auth认证组件
1. 介绍 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能. Django作为一个完美主义者的终极框架,当然也会 ...
- 复制Linux虚拟机(VMware vSphere Client 工具)
1.VMware vSphere Client 工具 登录,如下图 IP.用户名/密码均是物理机,登录完成界面: 2.选择一个复制的原虚拟机 A,点击左上角[文件]——导出——导出O ...
- git学习笔记 ---添加远程库
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举 ...
- Java中守护线程的总结
在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...
- Python 将中文、字母转成数字
Outline 把中文汉字或者英文字母或者特殊字符转换成数字. (实质是字符转成对应ASCII码) 转换 将中文汉字转成数字: ord('单个中文汉字') 反转: chr(21704) 将英文字母转成 ...
- 面试官再问Redis分布式锁如何续期?这篇文章甩 他一脸
一.真实案例 二.Redis分布式锁的正确姿势 据肥朝了解,很多同学在用分布式锁时,都是直接百度搜索找一个Redis分布式锁工具类就直接用了.关键是该工具类中还充斥着很多System.out.prin ...
- ASP.Net Jquery 随机验证码 文本框判断
// 登陆验证 $(function () { var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'a', 'B' ...
- Vue学习之webpack调用第三方loader(十五)
---恢复内容开始--- 一.webpack 默认只能打包处理 JS 类型的文件,无法处理 其他的非 JS 类型的文件: 如果非要处理 非 JS 类型的文件,我们需要手动安装一些 合适 第三方 lo ...
- 填坑——audio不能正常播放,控制台报错 Uncaught (in promise) DOMException
原文:https://blog.csdn.net/Mariosss/article/details/87861167 用chrome调试页面时,发现audio控件有时不能正常播放音频,控制台报错 Un ...
- robotframework的学习笔记(十八)——RequestsLibrary库的API介绍
requestsLibrary的关键字不多,常用的就几个. Create Session: 创建一个session,连接某个服务器.Create Ntlm Session: 也是创建一个session ...