react-router实现路由跳转

0. 前言

学习react是一条漫长的路,但是只要我们坚持下去,再远的路也可以走到尽头。好,好,好,难喝的一碗鸡汤!!!哈哈,其实,我就是想说,react的东西太多了,可能我们学会的只是一个边边角角,所以还要不断的学习!!!


timg.jpeg

1.简介

react-router它通过管理 URL,实现组件的切换和状态的变化,在开发复杂的应用的时候几乎肯定会用的到。

2. 怎么用react-router实现路由跳转?

在这里呢!我就不说怎么配置react的项目过程了,在前面的文章我已经有说过,所以,就不再演一遍了,虽然我有理,但是,我也挺懒的,不想在来一遍了,想知道怎么配置的盆友可以点击http://www.jianshu.com/p/f10babb8790d,当然你会配置的童鞋,请绕过,不会的呢,你就多费点时间看一看,看完了配置react项目,再来看怎么配置路由的。。。

一、基本用法

react-router 安装命令如下:
$ npm install react-router --save

当然,你通过这个指令安装的react-router的版本是4.0版本的,因为4.0版本跟以前的版本有一些出入,如果你觉得可能会出现问题我们可以安装指定的版本,通过下面的指令制定安装react-router 3.0版本如下:
npm install react-router@3 --save

使用时,路由器Router就是React的一个组件。

import { Router } from 'react-router';
render(<Router/>, document.getElementById('app'));

Router组件本身只是一个容器,真正的我们使用路由时候要通过Route组件定义。

import { Router, Route, hashHistory } from 'react-router';

render((
  <Router history={hashHistory}>
    <Route path="/" component={App}/>
  </Router>
), document.getElementById('app'));

上面代码中,用户访问根路由/(比如http://www.example.com/),组件APP就会加载到document.getElementById('app')
你可能还注意到,Router组件有一个参数history,它的值用hashHistory表示,路由的切换由URL的hash变化决定,即URL的#部分发生变化。举例来说,用户访问http://www.example.com/,实际会看到的是http://www.example.com/#/

Route组件定义了URL路径与组件的对应关系。你可以同时使用多个Route组件。

<Router history={hashHistory}>
  <Route path="/" component={App}/>
  <Route path="/repos" component={Repos}/>
  <Route path="/about" component={About}/>
</Router>

上面代码中,用户访问/repos(比如http://localhost:8080/#/repos)时,加载Repos组件;访问/abouthttp://localhost:8080/#/about)时,加载About组件。

3. 代码实现

首先呢,怎么配置的文件,我是真的不说了,你不知道怎么配置的就去看我上一篇的文章吧!!!好,开始!!!

一、index.html

其实,index.html页面没多少东西,他的主要作用就是相当于一个容器,把我们写好的组件渲染到我们的容器里。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>React Hello World</title>
</head>
<body>
    <div id = "app"></div>
    <script type="text/javascript" src = "index.js"></script>
</body>
</html>
二、main.jsx

是不是应用到我们在上面说的那些东西

import React from 'react'
import { render } from 'react-dom'
import { Router, Route, hashHistory } from 'react-router'
import App from './modules/App'
import About from './modules/About'
import Repos from './modules/Repos'

render((
  <Router history={hashHistory}>
    <Route path="/" component={App}></Route>
    <Route path="/repos" component={Repos}></Route>
    <Route path="/about" component={About}></Route>
  </Router>
), document.getElementById('app'))
三、modules文件以及下面的文件

因为我们想看一下在网址发生改变的时候,内容是不是相应的发生改变,所以建立一个modules文件,


3239FF7E-CEC8-49E1-A129-534C198693E4.png

About.js文件

import React from 'react';

class About extends React.Component {
  render() {
    return <div>About</div>
  }
}
export default About;

Repos.js文件

import React from 'react';

class Repos extends React.Component {
  render() {
    return <div>Repos</div>
  }
}
export default Repos;

App.js


import React from 'react';

class App extends React.Component {
  render() {
    return <div>Hello, React Router!</div>
  }
}
export default App;
四、看一下代码渲染之后的效果

这里还必须得说一句,你如果看了我写的上一篇文章,那么你会发现其实改的东西不多,就是添加一个modules文件夹,还有就是安装一下react-router这个路由。

好了,废话不说了,看效果


GIF.gif
五、点击切换路由

上面的代码几乎不怎么改变,改变的主要是App.js文件,其他的文件不用改变,看代码

import React from 'react'
import { Link } from 'react-router'
class App extends React.Component{
  render() {
    return (
      <div>
        <h1>React Router learning</h1>
        <ul role="nav">
          <li><Link to="/about">About</Link></li>
          <li><Link to="/repos">Repos</Link></li>
        </ul>
      </div>
    )
  }
}

export default App;

在这里我告诉你一个秘密,Link类似于之前用过的<a/>标签,估计你就有点懵懵懂懂的感觉了。。。

六、看一下点击实现路由切换的效果

这里呢,就不废话了,有图有真像。。。


GIF.gif

4. 结束语

好了,react-router就写着么多吧,希望我写的东西,能够给正在学习react的同学一点帮助!!!可以点赞,分享!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,803评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • Lesson11、首先确保安装了Node.js和npm依赖包管理工具2、在git上克隆官方示例程序 git clo...
    冰_心阅读 2,702评论 0 16
  • 上次说到了第十章,这次从这里开始,原来收留奥利弗的是一个伪君子,他教奥利弗和他的伙伴们一起上街偷东西,奥利弗第一...
    Angelia小鲤鱼阅读 261评论 0 0
  • 以前上高中的时候,有一个学霸型的舍友,被我们亲切的称为“大哥”,大哥是典型的三好学生,没有缺点,如果非要找一点的话...
    东海浪尽阅读 593评论 2 3