本文来自于官方文档,属于意译而非直译

  • 基本组件

React Router 有三种类型的组件,分别是:react-router、react-router-dom、react-router-native

你在web 程序中使用了路由组件,那你就应该引入 react-router-dom:

import { BrowserRouter, Route, Link } from 'react-router-dom'
  • 路由

React Router 应用程序的的核心是路由组件。对于 web 项目,react-router-dom 提供了 <BrowserRouter> 和 <HashRouter> 路由。这两种方法都专门创建了 history 对象 。一般来说,

如果你有一个响应请求的服务器,你应该使用  <BrowserRouter> 路由;如果你使用的是静态文件服务器,你应该使用  <HashRouter> 路由。

import { BrowserRouter } from 'react-router-dom'
ReactDOM.render((
<BrowserRouter>
<App/>
</BrowserRouter>
), holder)

路由组件无法接受两个及两个以上的子元素,看一下我自己写的

ReactDom.render((
<HashRouter history={hashHistory}>
<Switch>
<Route exact path="/" component={App}/>
<Route path="/repos" component={Repos}/>
<Route path="/about" component={About}/>
</Switch>
</HashRouter>
),document.getElementById('app'))

在这接受的是一个 switch 子元素。其实还可以这样写:

const RoutersComponent = ()=>(
<Switch>
<Route exact path="/" component={App}/>
<Route path="/repos" component={Repos}/>
<Route path="/about" component={About}/>
</Switch>
) ReactDom.render((
<HashRouter history={hashHistory}>
<RoutersComponent />
</HashRouter>
),document.getElementById('app'))

其实这个就和官方的例子没有什么区别了

  • 路由匹配

这里有两种路由匹配组件:<Route> 和 <Switch>

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

路由匹配是通过比较一个 <Route> 的路径和当前位置的路径名来完成的。当一个 <Route> 匹配时将渲染匹配到的内容,如果不匹配是将不会渲染。一个<Route> 没有 path,那它总是匹配的

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

你可以在你想要渲染内容的位置包含一个 <Route>,但是将 <Route> 放在一起是很有意义的。用 <Switch> 组件将 <Route> 组合在一起:

<Switch>
<Route exact path='/' component={Home}/>
<Route path='/about' component={About}/>
<Route path='/contact' component={Contact}/>
</Switch>

<Switch> 将 <Route> 组合在一起不是必须的,但是是非常有用的。<Switch> 将迭代所有的子元素 <Route>  并且只渲染当前位置匹配的第一个。当多个路径匹配到相同的路径名时,这是非常有帮助的。当在路径之间进行动画转换时,在确定没有路径匹配到当前位置时(你可以呈现404)

<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>

解释一下 “只渲染匹配到的第一个” :(http://localhost:8081/#/repos)

<Switch>
<Route exact path="/repos" component={App}/>
<Route path="/repos" component={Repos}/>
<Route path="/about" component={About}/>
</Switch>

在这里你只可以看到 App 的内容,看不到 Repos 的内容,因为 App 是匹配到的第一个

Raect Router 4 的使用 (1)的更多相关文章

  1. Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现

    前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...

  2. ASP.NET Core的路由[3]:Router的创建者——RouteBuilder

    在<注册URL模式与HttpHandler的映射关系>演示的实例中,我们总是利用一个RouteBuilder对象来为RouterMiddleware中间件创建所需的Router对象,接下来 ...

  3. ASP.NET Core的路由[2]:路由系统的核心对象——Router

    ASP.NET Core应用中的路由机制实现在RouterMiddleware中间件中,它的目的在于通过路由解析为请求找到一个匹配的处理器,同时将请求携带的数据以路由参数的形式解析出来供后续请求处理流 ...

  4. Angular2学习笔记——路由器模型(Router)

    Angular2以组件化的视角来看待web应用,使用Angular2开发的web应用,就是一棵组件树.组件大致分为两类:一类是如list.table这种通放之四海而皆准的通用组件,一类是专为业务开发的 ...

  5. CentOS / Redhat : Configure CentOS as a Software Router with two interfaces

    CentOS / Redhat : Configure CentOS as a Software Router with two interfaces   Linux can be easily co ...

  6. router路由去掉#!的踩坑记

    项目中在研究去掉router#!的过程中的踩坑过程.

  7. 虚拟 ​router 原理分析- 每天5分钟玩转 OpenStack(101)

    上一节我们创建了虚拟路由器"router_100_101",并通过 ping 验证了 vlan100 和 vlan101 已经连通. 本节将重点分析其中的原理. 首先我们查看控制节 ...

  8. 创建 router 连通 subnet- 每天5分钟玩转 OpenStack(100)

    上一节我们为 Neutron 虚拟路由器配置好了 L3 agent,今天将创建虚拟路由器“router_100_101”,打通 vlan100 和 vlan101. 打开操作菜单 Project -& ...

  9. react+redux教程(四)undo、devtools、router

    上节课,我们介绍了一些es6的新语法:react+redux教程(三)reduce().filter().map().some().every()....展开属性 今天我们通过解读redux-undo ...

随机推荐

  1. Django-5.2 模型层 多表操作

    7.3 多表操作 一.创建模型 实例:我们来假定下面这些概念,字段和关系作者模型:一个作者有姓名和年龄.作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之 ...

  2. RedHat7配置静态IP

    1.验证网络管理器状态,Active: active (running)表示正在运行,一般RHEL7都默认安装了. [root@localhost ~]# systemctl status Netwo ...

  3. (转) tcpdump参数解析及使用详解

    tcpdump介绍 原文:http://blog.csdn.net/hzhsan/article/details/43445787 tcpdump 是一个运行在命令行下的抓包工具.它允许用户拦截和显示 ...

  4. 搭建MHA

    安装MySQL 5.7 yum源的配置文件如下 [mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysq ...

  5. JS的定时到底有多不准

    博客逐步迁移到,独立博客,原文地址,http://www.woniubi.cn/js_hide_tab_setinterval/ 我们一直都在说,JS的定时非常的不准确,但是很少有人去验证他,今天我就 ...

  6. DXperience Winforms新版本13.2功能预览

    据界面控件厂商 DevExpress 官方最新消息,大家期盼已久的DXperience 13.2终于要面世了.今天在这里提前跟大家提前披露一下DXperience Winforms 13.2的一些精彩 ...

  7. css3照片墙

    一张张照片散乱的撒在一起,鼠标悬浮时旋转放大并摆正,效果如下图(所有图片均来自网络),主要使用到的css3属性有:transition.transform(scale.rotateZ).box-sha ...

  8. Quick How-To deny/allow IP using iptables

    How to block an IP using iptables? iptables -A INPUT -s xx.xx.xx.xx -j DROP How to block an IP for a ...

  9. 二叉查找树(c++)

    二叉查找数的操作: #include <iostream> using namespace std; typedef struct BitNode { int data; struct B ...

  10. UI自动化录制工具----UI Recorder

    1.系统和工具包 windows 7 64位 jdk,nodejs,webdriver,浏览器都放在工具包目录内.(晚上回去把文件上传到云盘,在分享给大家) 2.安装JDK和node.js 2.1 J ...