react-router4
一、关于react-router
react-router是一些封装好的组件用于前端路由,当我们点击的时候会出现一个虚拟的路由,并不会做页面的全刷新,实现不同组件之间的切换和跳转。(当然react-router里面把history.js这个库做了封装,history.js是基于window.history做的封装,所以react-router可以调用一些会话历史, history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 location 对象, 然后 router 使用它匹配到路由,最后正确地渲染对应的组件。)
二、有关学习网址
https://reacttraining.com/react-router/ 官网 https://www.npmjs.com/package/react-router npm https://github.com/ReactTraining/react-router github
三、react-router有3种使用场景
React Router被拆分成三个包:react-router
,react-router-dom
和react-router-native
。react-router
提供核心的路由组件与函数。其余两个则提供运行环境(即浏览器与react-native)所需的特定组件。
image.png
四、react-router-dom常用API介绍
<BrowserRouter>,<HashRouter> BrowserRouter和HashRouter用于最外层用法差不多,接受一个只接受一个子组件,通常我们会用于包裹最外面APP组件,区别是生成的路由HashRouter尾部会有一个“#”
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom'
ReactDOM.render((
<BrowserRouter>
<App />
</BrowserRouter>
), document.getElementById('root'))
<Link>,<NavLink> Link和NavLink生成的是a标签,也是用于路由的跳转,2个组件都有1个to的属性(属性值即切换路由路径,当然属性值也可以为对象的形式传递),唯一不同的是NavLink生成a标签以后会增加一个class叫active。
import { Link } from 'react-router-dom'
<Link
to={{
pathname: "/courses",
search: "?sort=name",
hash: "#the-hash",
state: { fromDashboard: true }
}}
/>
<Route>
该组件最外层需要用BrowserRouter或者HashRouter进行包裹,一般我们将BrowerRouter和HashRouter包裹在最外层APP组件上,但是route内部嵌套就不需要BrowserRouter和HashRouter包裹了。
Route
有path,component和exact
属性,path
为跳转路由路径,component
为跳转的组件。Route不是全匹配,所以当我们进行路由判断的时候,比如一个路径为"/",一个为“/news”这样我们进行跳转“/news”时任然会匹配到“/”,所以这时我们需要使用exact
加在有"/"路径的Route
上,加上以后路由绝对相等才会去匹配
<BrowserRouter>
<div>
<Route exact path="/" component={Home}/>
<Route path="/news" component={NewsFeed}/>
</div>
</BrowserRouter>
<Redirect> 用于重定向,就是上面所有Route路径都未找到,即匹配Redirect的to属性所指的路径路径 <Switch> 只渲染匹配到的第一个Route
<Switch>
<Route path="/home" component={Home} />
<Route path="/about" component={About} />
<Route path="/list" component={List} />
<Route path="/detail" exact component={Error} />
//Route组件中传参用:
<Route path="/detail/:id" component={Detail} />
<Redirect to="/home" />
</Switch>
高阶组件: withRouter
在我们使用Route组件时,会自动携带一些props传递至下一级组件。当我们没有使用Route组件时,我们想要使用这些props,这时我们需要使用高阶组件withRouter,之后我们就可以使用 match, location, history
这些API了。
import React from "react";
import { withRouter } from "react-router";
class ShowTheLocation extends React.Component {
render() {
const { match, location, history } = this.props;
return <div>You are now at {location.pathname}</div>;
}
}
export default withRouter(ShowTheLocation);
- vue-route+webpack部署单页路由项目,访问刷新出现404问题
- UNIX 高手的 10 个习惯
- linux下截取给定路径中的目录部分
- 一年坎坷也曾怀疑自己,如今五冠在手的柯洁将再战AI
- 从MapX到MapXtreme2004[3]-搜索图元Feature
- git push上传代码到gitlab上,报错401/403(或需要输入用户名和密码)
- mysql下mysqladmin日常管理命令总结
- Ubuntu下SVN安装和配置
- mysql表名忽略大小写问题记录
- 当wcf遇到JSON ?
- 从MapX到MapXtreme2004[2]-图层操作
- Nginx+keepalived双机热备(主主模式)
- 用正则表达式完成简单公式的替换计算
- Linux下误删除后的恢复操作(ext3/ext4)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法