JS - To my gril
/*
这个程序的流程是 , 首先执行 构造函数 (), 然后 就去执行那个 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的更多相关文章
- 一天带你入门到放弃vue.js(一)
写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...
- 【F12】Console命令,让js调试更简单
Console命令,让js调试更简单 一.显示信息的命令 console.log("normal"); // 用于输出普通信息 console.info("informa ...
- js中的extend,可实现浅拷贝深拷贝
js中的extend 1. JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为 ...
- js中的extend
js中的extend 1. JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为 ...
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- js学习笔记:操作iframe
iframe可以说是比较老得话题了,而且网上也基本上在说少用iframe,其原因大致为:堵塞页面加载.安全问题.兼容性问题.搜索引擎抓取不到等等,不过相对于这些缺点,iframe的优点更牛,跨域请求. ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- JS调用Android、Ios原生控件
在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...
- jquery和Js的区别和基础操作
jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...
随机推荐
- 使用Visual Studio 2013进行单元测试--初级篇
1.打开VS2013 --> 新建一个项目.这里我们默认创建一个控制台项目.取名为UnitTestDemo 2.在解决方案里面新增一个单元测试项目.取名为UnitTestDemoTest 创建完 ...
- spring来了-05-JDBC
概述 Spring对C3P0连接池的支持很完善 Spring对jdbc提供了JdbcTemplate,来简化jdbc操作, JdbcTemplate模板工具类,类似于DbUtils组件 JDBC: p ...
- R语言描述性统计常用函数
- IKAnalyzer 和 solr4.3 冲突
solr4.3 运行之后发现异常:Exception in thread "main" java.lang.VerifyError: class org.wltea.analyze ...
- mysql有回滚,php没有回滚的说法
mysql 事务表是有回滚的说法.当发生mysql层面的错误才会执行回滚
- 转: html表单中get方式和post方式的区别
1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据. 2.Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接 ...
- 从BlackHat2013中我们收获了什么
拉斯维加斯-BlackHat全球黑客大会是每年围观革新安全技术的最好机会,还能和那些 在这个行业里聪明至极的家伙交谈并从中得到些关于前沿技术的动向和启示.今年的会议无论参会人数还是议题数量是历届规模最 ...
- Jquery判断div是否显示
$("#test").is(":hidden");//是否隐藏 $("#test").is(":visible");// ...
- appjs desktop
/* author: daimajia name: appjs Express example email: daimajia@gmail.com any qu ...
- 如何禁止在DBGRID末位自动添加一行记录
http://www.tc5u.com/cpp/xg-1730729.htm 用DBGridEh吧,只要设置属性alopAppendEh为false即可 最简单将DBGrid的option属性中goE ...