一、Routerthis
(1)最基础的路由器,必须有history属性对象
(2)BrowserRouter和HashRouter都是由Router组件扩展而来路由
二、BrowserRouter同步
(1)BrowserRouter利用的是H5 的history API实现URL和UI同步hash
(2)内部的histroy对象由createBrowserHistory()生成it
三、HashRouterio
(1)HashRouter是经过改变URL的hash部分来实现URL和UI同步import
(2)内部的histroy对象由createHashHistory()生成基础
四、路由跳转的方式扩展
(1)Link和NavLink
使用NavLink的时候要注意,通常会出现第一个NavLink始终存在active类名,加一个exact属性就能够了
(2)当组件被withRouter包裹,组件的props里会又一个对象,对象里包含history、location和match属性,能够用this.props.history.push()进行路由跳转
(3)当路由器是HashRouter时,还能够本身建立history对象进行路由跳转,import { createHashHistory } from 'history' createHashHistory().push()进行路由跳转
当路由器是BrowserRouter时,createBrowserHistory().push()跳转时会致使URL改变但界面没更新,缘由待研究,可是能够经过hack的方式解决:
不用BrowserRouter, 用Router代替,向Router传入封装好的自定义的history对象(createBrowserHistory()),在须要用到createBrowserHistory().push()方法的组件内再导入这个自定义history对象,就能够了