一、基础概念
什么是react-router?
react的一个插件库。
专门用来实现一个SPA应用。
基于react的项目基本都会用到此库。
npm install --save react-router-dom
官方文档:https://reacttraining.com/react-router/web/guides/quick-start
什么是SPA?
单页Web应用(single page web application,SPA)。
整个应用只有一个完整的页面。
点击页面中的链接不会刷新页面,只会做页面的局部更新。
数据都需要通过ajax请求获取, 并在前端异步展现。
路由的相关概念
什么是路由?
一个路由就是一个映射关系(key:value)
key为路由路径, value可能是function/component路由分类
- 后端路由: node服务器端路由, value是function, 用来处理客户端提交的请求并返回一个响应数据
- 前台路由: 浏览器端路由, value是component, 当请求的是路由path时, 浏览器端前没有发送http请求, 但界面会更新显示对应的组件
后端路由
- 注册路由: router.get(path, function(req, res))
- 当node接收到一个请求时, 根据请求路径找到匹配的路由, 调用路由中的函数来处理请求, 返回响应数据
前端路由
- 注册路由: <Route path="/about" component={About}>
- 当浏览器的hash变为#about时, 当前路由组件就会变为About组件
react-router底层实现
history库
网址: https://github.com/ReactTraining/history
管理浏览器会话历史(history)的工具库
包装的是原生BOM(全称Browser Object Model,是指浏览器对象模型)中window.history和window.location.hashhistory API
History.createBrowserHistory():
得到封装window.history的管理对象
History.createHashHistory():
得到封装window.location.hash的管理对象
history.push():
添加一个新的历史记录
history.replace():
用一个新的历史记录替换当前的记录
history.goBack():
回退到上一个历史记录
history.goForword():
前进到下一个历史记录
history.listen(function(location){}):
监视历史记录的变化
二、react-router-dom相关API
基础组件
<BrowserRouter>
属于路由器组件标签,不带"#"符号,是基于H5的标准语法是实现
<HashRouter>
也属于路由器组件标签,带有"#"符号,时基于H5之前的语法实现
<Route>:
路由标签。
<Redirect>
重定向标签。
<Link>
路由链接标签。
<NavLink>
导航路由链接标签。
<Switch>
交换/切换标签,它里面开源包含多个路由("<Route>")标签。
PS:
自定义组件:
export default class MyNavLink extends Component{
render(){
//通过"{...this.props} "属性可以将外部传入的所有属性传递给NavLink标签,不仅如此,咱们还可以通过"activeClassName"来自定义样式
return <NavLink {...this.props} activeClassName="selected"/>
}
}
其它
history对象
match对象
withRouter函数