React Router 基础组件一览

简介: 在 React Router 中有三种类型的组件:路由器组件,路由匹配组件,导航组件。这些组件都来自于 react-router-dom。路由器对于每一个 React Router 应用来说,都应该有一个路由器组件,它们会为应用创建一个专用的 history 对象。

在 React Router 中有三种类型的组件:路由器组件,路由匹配组件,导航组件。这些组件都来自于 react-router-dom

路由器

对于每一个 React Router 应用来说,都应该有一个路由器组件,它们会为应用创建一个专用的 history 对象。针对 Web 项目,react-router-dom 提供了 <BrowserRouter><HashRouter>

import { BrowserRouter } from 'react-router-dom';

ReactDOM.render((
  <BrowserRouter>
    <App/>
  </BrowserRouter>
), holder);

具体使用方式参见 BrowserRouterHashRouter

路由

React Router 提供了两种路由匹配组件:<Route><Switch>

Route 组件

路由匹配是通过比较 <Route> 组件的 path 属性和当前地址的 pathname 实现的,如果匹配则渲染当前路由组件的内容,如果不匹配则渲染 null。注意:没有提供 path 属性的 <Route> 组件将总是匹配。

import { Route } from 'react-router-dom';

// when location = { pathname: '/about' }
<Route path='/about' component={About} /> // renders <About/>
<Route path='/contact' component={Contact} /> // renders null
<Route component={Always} /> // renders <Always/>

具体使用方式参见 Route

Switch 组件

<Switch> 组件用于给 <Route> 组件分组,可以将一组 <Route> 组件嵌套在 <Switch> 组件中。

那么,<Switch> 组件仅是为了给 <Route> 组件分组而诞生的吗?我们知道 <Route> 组件通过比较它的 path 属性和当前地址来判断是否渲染它的内容,所以就会存在多个 <Route> 匹配成功且都渲染它们内容的情况。为了避免这样的情况,<Switch> 组件就起了作用,它会迭代当中的 <Route> 组件,并选出第一个匹配的 <Route> 来渲染。

import { Switch, Route } from 'react-router-dom';

<Switch>
  <Route exact path='/' component={Home} />
  <Route path='/about' component={About} />
  <Route path='/contact' component={Contact} />
  {/* when none of the above match, <NoMatch> will be rendered */}
  <Route component={NoMatch} />
</Switch>

具体使用方式参见 Switch

导航

React Router 提供了 <Link> 组件用于为应用提供链接,当渲染 <Link> 组件的时候,会在应用中渲染为 HTML 的 <a> 标签。

另外还有一个特殊的 <Link> 组件就是 <NavLink>,如果当前的地址与它的属性相匹配,它就会使用 "active" 样式。

任何时候如果您想要强制一个导航,就可以使用 <Redirect> 组件,当它被渲染的时候,就会导航到它的属性。

<Link to='/'>Home</Link>
// <a href='/'>Home</a>

// location = { pathname: '/react' }
<NavLink to='/react' activeClassName='hurray'>React</NavLink>
// <a href='/react' className='hurray'>React</a>

<Redirect to='/login'/>

具体使用方式参见 LinkNavLinkRedirect

相关文章
|
3月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
98 0
|
3月前
|
存储 前端开发 JavaScript
【第34期】一文学会React组件传值
【第34期】一文学会React组件传值
31 0
|
3月前
|
前端开发
【第31期】一文学会用React Hooks组件编写组件
【第31期】一文学会用React Hooks组件编写组件
35 0
|
3月前
|
存储 前端开发 JavaScript
【第29期】一文学会用React类组件编写组件
【第29期】一文学会用React类组件编写组件
30 0
|
3月前
|
前端开发 开发者
【第26期】一文读懂React组件编写方式
【第26期】一文读懂React组件编写方式
28 0
|
3月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
40 0
|
13天前
|
前端开发
【掰开揉碎】React Router——React应用导航(二)
【掰开揉碎】React Router——React应用导航(二)
|
2月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
16 1
|
2月前
|
前端开发 JavaScript API
介绍一下React Router的工作原理。
介绍一下React Router的工作原理。
31 5
|
2月前
|
前端开发 应用服务中间件 数据库
react服务端组件
react服务端组件
21 0