/*

     这个程序的流程是 , 首先执行 构造函数 (), 然后 就去执行那个 render 渲染 , 在  render 哪里 的if else 转向应该执行的渲染方法 , 例如 commitsrender
然后当 标签对应的渲染方法执行完毕之后 就over了 .
*/ import React from 'react';
import ajax from 'superagent'; class Detail extends React.Component { // 声明一个 Detail 类 通过关键字 extend 继承自 React.Component
constructor(props) { // construtor 是 构造函数的意思 在任何语言之内 当你用这个类 实例化一个对象之后 , 就会自动执行 构造函数(优先级很高) 。
super(props); // 通过 super 关键字 将 props 这个属性给 该类 的父亲 React.Component this.state = { // 给 this 所指向的对象 , 绑定方法 .
mode: 'commits', // mode 是指定默认的 模式 , 也就是当你打开网页的时候 你首先看到的是 commits 中的内容 .
commits: [], // 现在 声明 this的属性 (state) , (其实 : 后面的内容随意 , 但是为了容易理解下文 所以这里就是 [] 表明这是一个数组 )
forks: [],
pulls: []
};
}
componentWillMount() {
ajax.get('http://192.168.1.100:3000/test1') // 通过这个方法 来获取 地址中的内容 .
.end((error, response) => { // error 来 储存上面的获取内容是否成功 , response 来储存 获取的内容 .
if (!error && response) { // 如果 没有发生错误 , 并且有内容的话
this.setState({ commits: response.body }); // 这里是将 , 上文中的 response.body 的内容 绑定到 , this 下面的conmits 属性 .
} else {
console.log('Error fetching commits', error); // 如果 获取内容出问题的话 就 在web控制台 输出 这里的内容 .
}
}
);
ajax.get('http://192.168.1.100:3000/test2') // 同上
.end((error, response) => {
if (!error && response) {
this.setState({ forks: response.body });
} else {
console.log('Error fetching forks', error);
}
}
);
ajax.get('http://192.168.1.100:3000/test3') // 同上
.end((error, response) => {
if (!error && response) {
this.setState({ pulls: response.body });
} else {
console.log('Error fetching pulls', error);
}
}
);
}
showCommits() { // 这个方法的意思是 展现出来commits的内容 .
this.setState({ mode: 'commits' }); // 在这里 我们昨天说过 可以通过 setstate 这个方法 来监测当 内容改变的时候 会自动刷新页面 .
}
showForks() {
this.setState({ mode: 'forks' }); // 同上
}
showPulls() {
this.setState({ mode: 'pulls' });
}
renderCommits() { // 这里是 渲染 commits的内容 .
return this.state.commits.map((commit, index) => { // 在上面 (15-24) commits , 可以看到commits的储存的 第一个网页中的内容 . index的数值 是从 0 开始 最大值根据 commits的大小来确定 . // 在括号里面 commit 储存 commits的内容 相当于 commit=this.state.commits
const author = commit.author ? commit.author : 'xpower'; // 因为 网页中的是 author 所以当 commit 代表 就等于了 网页的内容 . 可以通过 . 的方法来调用其中和属性
return (<p key={index}> // 这里是 因为采用了匿名函数 , react 不能识别出来 , 网页标签的代号 . 所以在这里需要手动设置 .
<strong>{author}</strong>:
<a href={commit.url}>{commit.url}</a>.// 第一个 commit.url 是实质上点击之后 导向的地址 . 第二个 commit.url是网页上面显示的地址 .
</p>);
});
}
renderForks() {
return this.state.forks.map((fork, index) => {
const owner = fork.owner ? fork.owner : 'Anonymous'; return (<p key={index}>
<strong>{owner}</strong>: forked to
<a href={fork.url}>{fork.url}</a> at {fork.created_at}.
</p>);
});
}
renderPulls() {
return this.state.pulls.map((pull, index) => {
const user = pull.user ? pull.user : 'Anonymous';
return (<p key={index}>
<strong>{user}</strong>:
<a href={pull.url}>{pull.url}</a>.
</p>);
});
}
render() {
let content;
if (this.state.mode === 'commits') { //这几个 if else 适用于检查现在 . 是执行的的哪一个标签 .
content = this.renderCommits(); // 然后开始调用 , 相应标签对应的函数 .
} else if (this.state.mode === 'forks') {
content = this.renderForks();
} else {
content = this.renderPulls();
}
return (<div>
<button onClick={this.showCommits.bind(this)}>Show Commits</button>
<button onClick={this.showForks.bind(this)}>Show Forks</button>
<button onClick={this.showPulls.bind(this)}>Show Pulls</button>
{content}
</div>);
}
}
export default Detail;

JS - To my gril的更多相关文章

  1. 一天带你入门到放弃vue.js(一)

    写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...

  2. 【F12】Console命令,让js调试更简单

    Console命令,让js调试更简单 一.显示信息的命令 console.log("normal"); // 用于输出普通信息 console.info("informa ...

  3. js中的extend,可实现浅拷贝深拷贝

    js中的extend   1.    JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为 ...

  4. js中的extend

    js中的extend   1.    JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为 ...

  5. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  6. js学习笔记:操作iframe

    iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...

  7. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  8. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  9. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

随机推荐

  1. 《javascript高级程序设计》 第20章 JSON

    20.1 语法 20.1.1 简单值 20.1.2 对象 20.1.3 数组 20.2 解析与序列化 20.2.1 JSON 对象 20.2.2 序列化选项 20.2.3 解析选项 JSON 对象有两 ...

  2. listbox鼠标拖动数据和为button注册快捷键

    将listbox1中的数据用鼠标拖动至listbox2,即有左至右. 分别对应控件注册如下事件DragEnter,MouseDown,DragDrop 代码如下: //P128 DataGridVie ...

  3. (28)odoo中css可用颜色对照表

    颜色 颜色英文代码 形像颜色 HEX格式 RGB格式 LightPink 浅粉红 #FFB6C1 255,182,193 Pink 粉红 #FFC0CB 255,192,203 Crimson 猩红 ...

  4. png-24在ie6中的几种透明方法

    转载 http://www.cnblogs.com/jikey/archive/2013/03/13/2957168.html 由于游戏类官网在页面背景和装饰人物的设计上追求画丽且与游戏风格想匹配,这 ...

  5. 去除DataTable重复数据的三种方法

    业务需求 最近做一个把源数据库的数据批次导出到目标数据库.源数据库是采集程序采集而来的原始数据库,所以需要对其进行一些处理(过滤一些为空,长度太短或太长,非法字符,重复数据)然后在进行入库. 其中要避 ...

  6. Kids and Prizes(SGU 495)

    495. Kids and Prizes Time limit per test: 0.25 second(s)Memory limit: 262144 kilobytes input: standa ...

  7. uva 12657(双向链表)

    一定要注意swap(x, y),x, y可能相邻! #include <cstdio> #define N 100005 #define ll long long int n, m; st ...

  8. VS输入输出基本操作以及数据类型和类型转换

    (一)   C#项目的组成结构 项目结构 .config ---配置文件(存放配置参数文件) .csproj ---项目文件(管理文件项) .sln   ---解决方案文件(管理项目) .cs   - ...

  9. async 和 await 以及Action Func

    C# 5.0中引入了async 和 await.这两个关键字可以让你更方便的写出异步代码. 看个例子: public class MyClass { public MyClass() { Displa ...

  10. MongoDb系列

    这个系列主要总结学习MongoDb过程中的一些经验. 简单介绍及环境搭建 常用命令 C#驱动及应用 管理工具MongoVUE使用