React Router中有三種類型的組件:路由器組件、路由匹配組件、導航組件。
1、路由器組件(BrowserRouter、HashRouter)
這兩個都是創建一個專門的history對象。
2、路由匹配組件(Route、Switch)
路由匹配一個由<Route>的path到當前位置的pathname。當<Route>匹配時它將呈現其內容,當它不匹配時,它將呈現null。
<Switch>組件用于將<Route>組合在一起。
當<Switch>不需要分組<Route>時, <Switch>將迭代其所有子<Route>元素,并僅渲染與當前位置匹配的第一個子元素。
當出現多個路徑名相同的路徑時,路由之間的轉換,以及識別沒有路徑時。
3、導航組件(Link、NavLink、Redirect)
<Link>組件來用來編譯呈現 a 標簽。
<NavLink>是一種特殊類型。用于當前路由與to地址相同時。
<Redirect>強制導航(重定向)。
Api:
1、<BrowserRouter>
import { BrowserRouter } from 'react-router-dom'
<BrowserRouter>
????????<App/>
</BrowserRouter>
2、<HashRouter>
3、<Link>
4、<NavLink>
5、<MemoryRouter>
6、<Redirect>
7、<Route>
8、<Router>
import { Router } from "react-router";
import { createBrowserHistory } from "history";
const history = createBrowserHistory()
<Router history={ history }>
????<App/>
</Router>
9、<StaticRouter>
10、<Switch>
11、matchPath()
在<Route>正常渲染周期之外使用的相同匹配代碼,例如在服務器上呈現之前收集數據依賴性。
@pathname:第一個參數,用于監聽地址;
@props:第二個參數,與Route相同;
@returns:返回一個對象
import { matchPath } from "react-router";
const match = matchPath("/users/123", {
????????path: "/users/:id",
? ? ? ? exact: true,
????????strict: false
});
12、withRouter()
使用它,可以通過this.props.history訪問到該組件。
class order extends React.Component {}
const orderRouter = withRouter(order);
this.props:
1、.history
2、.location
3、.match