在react-router4中,除了在路由文件中還能夠在頁面中寫路由組件
dva初始化項目中router.js文件的內容以下react
import React from 'react'; import { Router, Route, Switch } from 'dva/router'; import IndexPage from './routes/IndexPage'; function RouterConfig({ history }) { return ( <Router history={history}> <Switch> <Route path="/" exact component={IndexPage} /> </Switch> </Router> ); } export default RouterConfig;
頁面中的路由:web
import React from 'react'; import { Router, Route, Switch } from 'dva/router'; import IndexPage from './routes/IndexPage'; class Products extends React.Component { render() { return ( <div> <Switch> <Route path="/" component={IndexPage} /> </Switch> </div> ) } }
react-router-dom是用於DOM綁定的 React Router, 比react-router多出了<Link><BrowserRouter>這樣的DOM類組件
import { Router, Route, Switch, Redirect } from 'react-router-dom';
// 用於導航的歷史對象 <Router history={history}></Router> // 一個使用了 HTML5 history API 的高階路由組件,保證你的 UI 界面和 URL 保持同步 <BrowserRouter basename="/minooo" // 添加一個基準URL forceRefresh={false} // 當瀏覽器不支持 HTML5 的 history API 時強制刷新頁面 getUserConfirmation={getConfirmation()} // 導航到此頁面前執行的函數 keyLength={12} // 設置它裏面路由的 location.key 的長度。默認是6 ></BrowserRouter> <HashRouter></HashRouter> // Hash history 不支持 location.key 和 location.state。 // 另外因爲該技術只是用來支持舊版瀏覽器,所以更推薦你們使用 BrowserRouter
若是你訪問 /about,那麼組件 About User Nomatch 都將被渲染出來,由於他們對應的路由與訪問的地址 /about 匹配瀏覽器
<Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/>
<Switch>只渲染出第一個與當前訪問地址匹配的 <Route> 或 <Redirect>react-router
<Switch> <Route exact path="/" component={Home}/> <Route path="/about" component={About}/> <Route path="/:user" component={User}/> <Route component={NoMatch}/> </Switch>
<Route path="/" // url路徑 exact // bool 嚴格匹配 ’/link’與’/’是不匹配的,可是在false的狀況下它們是匹配的 component={IndexPage} // 渲染的組件 /> <Route path="/" // url路徑 exact // bool 嚴格匹配 ’/link’與’/’是不匹配的,可是在false的狀況下它們是匹配的 render={() => <div>Home</div>} // 內聯渲染 />
// 經過from匹配路由重定向 <Switch> <Redirect from='/users/:id' to='/users/profile/:id'/> <Route path='/users/profile/:id' component={Profile}/> </Switch> // 經過render重定向 <Route exact path="/" render={() => ( loggedIn ? ( <Redirect to="/dashboard"/> ) : ( <PublicHomePage/> ) )}/>
// to爲string <Link to='/courses?sort=name'/> // to爲obj <Link to={{ pathname: '/courses', search: '?sort=name', hash: '#the-hash', state: { fromDashboard: true } }}/> // replace <Link to="/courses" replace /> // replace(bool):爲 true 時,點擊連接後將使用新地址替換掉訪問歷史記錄裏面的原地址; // 爲 false 時,點擊連接後將在原有訪問歷史記錄的基礎上添加一個新的紀錄。默認爲 false;
<NavLink to="/about" exact>About</NavLink> <NavLink to="/faq" activeClassName="selected" >FAQs</NavLink> <NavLink to="/faq" activeStyle={{ fontWeight: 'bold', color: 'red' }} >FAQs</NavLink> <NavLink to="/events/123" isActive={oddEvent} >Event 123</NavLink>
history 對象一般具備如下屬性和方法:dom
location: object 當前訪問地址信息組成的對象,具備以下屬性:函數
pathname: string URL路徑 search: string URL中的查詢字符串 hash: string URL的 hash 片斷 state: string 例如執行 push(path, state) 操做時,location 的 state 將被提供到堆棧信息裏,state 只有在 browser 和 memory history 有效。
location 是指你當前的位置,將要去的位置,或是以前所在的位置this
{ key: 'ac3df4', // not with HashHistory! pathname: '/somewhere' search: '?some=search-string', hash: '#howdy', state: { [userDefined]: true } }
在如下情境中能夠獲取 location 對象url
能夠在不一樣情境中使用 location:3d
<Link to={location} /> <NaviveLink to={location} /> <Redirect to={location /> history.push(location) history.replace(location)
const Topics = ({ match }) => ( <div> <Link to={`${match.url}/rendering`}>Rendering with React</Link> <Route path={`${match.url}/:topicId`} component={Topic} /> </div> );
match 對象包含了 <Route path> 如何與 URL 匹配的信息,具備如下屬性:指針
在如下情境中能夠獲取 match 對象
當一個 Route 沒有 path 時,它會匹配一切路徑。
具體實例可參考 https://reacttraining.com/rea...