react基础(1):介绍了如何创建项目,总结了JSX、组件、样式、事件、state、props、refs、map循环,另外还讲了mock数据和ajax

还是用 react基础1 里创建的项目继续写案例。

react-router

在做单页面应用的时候就需要用到路由了。

首先来看一下我们的项目目录,如下所示:

package.json和webpack.config.js的内容和 react基础(1)一样的。

下面贴一下entries里的文件内容

react2/src/entries/index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Demo</title>
</head>
<body> <div id="root"></div> <script src="common.js"></script>
<script src="index.js"></script> </body>
</html>

react2/src/entries/index.js

import React, { Component } from 'react';
import ReactDOM from 'react-dom'; class App extends Component {
render(){
return(
<div>123</div>
)
}
} ReactDOM.render(
<App />,
document.getElementById('root')
)

安装依赖 npm i

启动本地服务 npm start

浏览器打开浏览效果 http://localhost:8989/

效果如下

案例1

react2/src/entries/index.js(其他几个文件不修改)

import React, { Component, PropTypes } from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, hashHistory, Link } from 'react-router'; class App extends Component {
render(){
return(
<div>
<ul>
<li><Link to="/movie">电影</Link></li>
<li><Link to="/tv">电视剧</Link></li>
</ul>
{this.props.children}
</div>
)
}
} class Tv extends Component {
render(){
return(
<div>
<ul>
<li>还珠格格</li>
<li>来自星星的你</li>
</ul>
</div>
)
}
} class Movie extends Component {
render(){
return(
<div>
<ul>
<li>暮光之城</li>
<li>喜剧之王</li>
</ul>
</div>
)
}
} const Routes = ({ history }) =>
<Router history={history}>
<Route path="/" component={App}>
<Route path="/tv" component={Tv} />
<Route path="/movie" component={Movie} />
</Route>
</Router>; Routes.propTypes = {
history: PropTypes.any,
}; ReactDOM.render(
<Routes history={hashHistory} />,
document.getElementById('root')
);

Router、Route、Link这三个大家可以看一下教程了解一下定义,这里不详细讲解:教程戳这里

关于history的教程戳这里。常用的History有三种:browserHistory、hashHistory、createMemoryHistory(从react-router引出)。在声明路由的时候需要指定所选的方式,没有默认选项。

使用hashHistory,浏览器的url是这样的:/#/user/liuna?_k=adseis

使用browserHistory,浏览器的url是这样的:/user/liuna (大家可以自己试试这种,这里就不写案例了)

这个案例写出来的效果类似tab切换

案例2:

react2/src/entries/index.js(其他几个文件不修改)

import React, { Component, PropTypes } from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, hashHistory, Link } from 'react-router'; class App extends Component {
render(){
return(
<div>
<ul>
<li><Link to="/movie">电影</Link></li>
<li><Link to="/tv">电视剧</Link></li>
</ul>
{this.props.children}
</div>
)
}
} class Tv extends Component {
render(){
return(
<div>
<Link to="/">返回</Link>
<ul>
<li>还珠格格</li>
<li>来自星星的你</li>
</ul>
</div>
)
}
} class Movie extends Component {
render(){
return(
<div>
<Link to="/">返回</Link>
<ul>
<li>暮光之城</li>
<li>喜剧之王</li>
</ul>
</div>
)
}
} const Routes = ({ history }) =>
<Router history={history}>
<Route path="/" component={App} />
<Route path="/tv" component={Tv} />
<Route path="/movie" component={Movie} />
</Router>; Routes.propTypes = {
history: PropTypes.any,
}; ReactDOM.render(
<Routes history={hashHistory} />,
document.getElementById('root')
);

这个效果就相当于是直接跳转了页面,和案例1的tab切换效果不一样的主要代码,如下所示

案例1里面component为Tv和Movie的Route标签是写在component为App的Route标签里的,而案例2里相当于是同级的。

案例3

react2/src/entries/index.js(其他几个文件不修改)

import React, { Component, PropTypes } from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, hashHistory, Link, IndexRoute } from 'react-router'; class App extends Component {
render(){
return(
<div>
<p>
<span><Link to="/movie">电影</Link></span>&nbsp;&nbsp;
<span><Link to="/tv">电视剧</Link></span>
</p>
{this.props.children}
</div>
)
}
} class Home extends Component {
render(){
return(
<div>欢迎你!</div>
)
}
} class Tv extends Component {
render(){
return(
<div>
<Link to="/">返回</Link>
<ul>
<li>还珠格格</li>
<li>来自星星的你</li>
</ul>
</div>
)
}
} class Movie extends Component {
render(){
return(
<div>
<Link to="/">返回</Link>
<ul>
<li>暮光之城</li>
<li>喜剧之王</li>
</ul>
</div>
)
}
} const Routes = ({ history }) =>
<Router history={history}>
<Route path="/" component={App}>
<IndexRoute component={Home}/>
<Route path="/tv" component={Tv} />
<Route path="/movie" component={Movie} />
</Route>
</Router>; Routes.propTypes = {
history: PropTypes.any,
}; ReactDOM.render(
<Routes history={hashHistory} />,
document.getElementById('root')
);

从上面的效果图中,可以看到,有“欢迎你!”这个类似首页的东西。

IndexRoute默认路由,当path=“/”时,默认显示Home组件。IndexRoute也是从react-router里引出的。

ps

这篇还是react基础(1)写完以后的存货,好久没有更新了,先把这篇存货发了

react基础(2)的更多相关文章

  1. react基础(1)

    在 react入门系列 里面,介绍了一些react的基础知识,在react基础部分,会结合手脚架工具进行更多的总结. 关于webpack我在这里就不讲解了,有需要的小伙伴可以自己去百度一下学习资料,我 ...

  2. react基础语法(五) state和props区别和使用

    props的验证: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  3. react基础用法二(组件渲染)

    react基础用法二(组件渲染) 如图所示组件可以是函数 格式:function 方法名(){ return <标签>内容</标签>} 渲染格式: <方法名 />  ...

  4. react基础用法一(在标签中渲染元素)

    react基础用法一(渲染元素) 如图所示最简单的变量使用方法 格式 let 变量名称 = 赋值: 渲染格式直接用 {变量名称} 就可以直接渲染到页面 如图所示第二种渲染方法 格式 const 变量名 ...

  5. AntDesign(React)学习-3 React基础

    前面项目已经建起来了,但是没有React基础怎么办,从头学习,这个项目使用的是基于React16.X版本的几种技术集成,那么我们就从网上找一些相关的资料进行研究,我的习惯是用到哪学到哪. 一.先看一些 ...

  6. React 基础入门,基础知识介绍

    React不管在demo渲染还是UI上,都是十分方便,本人菜鸟试试学习一下,结合阮一峰老师的文章,写下一点关于自己的学习react的学习笔记,有地方不对的地方,希望各位大牛评论指出: PS:代码包下载 ...

  7. React基础语法学习

    React主要有如下3个特点: 作为UI(Just the UI) 虚拟DOM(Virtual DOM):这是亮点 是React最重要的一个特性 放进内存 最小更新的视图,差异部分更新 diff算法 ...

  8. React 基础入门

    React 起源于 Facebook 内部项目,是一个用来构建用户界面的 Javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组 ...

  9. react基础

    上一篇文章主要是记录了自己是如何创建react项目的,今天则主要是总结一下react中的一个基础入门知识,包括数据定义和绑定.属性绑定.数组循环等等. 组件继承和挂载 当我们使用脚手架或者命令行创建一 ...

随机推荐

  1. Linux常见命令(五)——rmdir

      前  言 JRedu 今天我们来介绍第五个命令:rmdir . 命令英文原意:remove empty directories 命令用途: rmdir:删除空目录,非空的目录不能删除 本章内容将详 ...

  2. PyQt:昨天今天明天表示方法

    PyQt中今天的表示方法如下: QtCore.QDate.currentDate() 那么,明天怎么表示呢? today=QtCore.QDate.currentDate().toJulianDay( ...

  3. Android Studio的Terminal配置

    1.首先检查你的setting设置如下图 2.如果是已经ok的,请在你的Android sdk的文件夹目录下找到adb.exe,并配置环境变量 3.重启as,在terminal内输入 -adb hel ...

  4. 为测试赋能,腾讯WeTest探索手游AI自动化测试之路

    作者:周大军/孙大伟, 腾讯后台开发 高级工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处.  WeTest导读 做好自动化测试从来不件容易的事情,更何况是手游的自动化测试,相比传 ...

  5. Keepalive之nginx调度架构

    author:JevonWei 版权声明:原创作品 单主模式Keepalive之Nginx调度 实验目的:实现Nginx调度的高可用,当一台Nginx调度器故障时,启用备用的Nginx调度,在架构中, ...

  6. java对文件加锁

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt208 在对文件操作过程中,有时候需要对文件进行加锁操作,防止其他线程访问该文 ...

  7. mysql 用多次查询代替一次复杂join查询的优点分析

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt344 多高性能的应用都会对关联查询进行分解.简单地,可以对每一个表进行一次单 ...

  8. bgp选路原则【第二部】

    面向逻辑谈bgp选路原则(第二部) 终于到了BGP终极解析的第二部曲--BGP选路原则.与题目相呼应,我不会直接介绍选路原则的规则,而是从时间逻辑和空间逻辑上将所有的选路原则分层分类.因为只有从这种角 ...

  9. 如何在sublime+chrome中调试php代码?

    1.搭建php本地运行环境具体点击如何使用phpstudy本地搭建多站点(每个站点对应不同的端口) 2.下载php_xdebug.dll, [5.3版以上的php下载地址]http://pecl.ph ...

  10. 201521123122 《java程序设计》 第五周实验总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过? ...