react-router
还是 react-router-dom
?
在 React 的使用中,我们一般要引入两个包,react 和 react-dom,那么 react-router 和react-router-dom 是不是两个都要引用呢?
非也,坑就在这里。他们两个只要引用一个就行了,不同之处就是后者比前者多出了 <Link> <BrowserRouter> 这样的 DOM 类组件。
因此我们只需引用 react-router-dom 这个包就行了
withRouter
withRouter
:这个方法是把一个非路由管控的组件,变成路由管控的组件,可以使用this.props获取到 history、location、match
使用方法在export default 组件时用withRouter(APP)
受路由管控组件例:<Route path={'/login'} component={Login}/>
BrowserRouter
BrowserRouter
:一个使用了 HTML5 history API 的高阶路由组件,保证你的 UI 界面和 URL 保持同步。此组件拥有以下属性:
使用方法:
import { BrowserRouter } from 'react-router-dom';
<BrowserRouter
basename={string}
forceRefresh={bool}
getUserConfirmation={func}
keyLength={number}
>
<App />
</BrowserRouter>
API:
basename: string
所有位置的基准 URL。如果你的应用程序部署在服务器的子目录,则需要将其设置为子目录。 basename 的正确格式是前面有一个前导斜杠,但不能有尾部斜杠。
<BrowserRouter basename="/admin">
<Route path={'/login'} component={Login}/>
</BrowserRouter>
上例中的login跳转的URL地址最终将被呈现为https://www.xxxx.com/admin/login
forceRefresh: bool
如果为 true ,在导航的过程中整个页面将会刷新。一般情况下,只有在不支持 HTML5 history API 的浏览器中使用此功能。
<BrowserRouter forceRefresh={! 'pushState' in window.history} />
keyLength: number
作用:设置它里面路由的 location.key 的长度。默认是6。(key的作用:点击同一个链接时,每次该路由下的 location.key都会改变,可以通过 key 的变化来刷新页面。)
使用场景:按需设置。
getUserConfirmation: fn
用于确认导航的函数,默认使用 window.confirm。例如,当从 /a
导航至 /b
时,执行一个callback会使用默认的 confirm
函数弹出一个提示,用户点击确定后才进行导航,否则不做任何处理。