1.依赖的资源:
<script type="text/javascript" src='../asset/react.js'></script>
<script type="text/javascript" src='../asset/react-dom.js'></script>
<script type="text/javascript" src='../asset/JSXTransformer.js'></script> //解析text/jsx语法
<script type="text/javascript" src='../asset/browser.min.js'></script> //解析text/babel语法
2.基本写法:
html:<div id='demo1'></div>
JS:
ReactDOM.render(
<h1>Hello, I.m demo1!</h1>,
document.getElementById('demo1')
);
3.定义组件式写法createClass(!组件名称开头字母一定要大写)
html:<div id='demo2'></div>
JS:
var Demo2Box=React.createClass({
render:function(){
return(
<div className="demo2Box">
hello,I.m demo2
</div>
);
}
});
ReactDOM.render(
<Demo2Box />,
document.getElementById('demo2')
);
4.React.createElement使用,参数( ReactElement element, [object props], [children ...])
基本用法: React.createElement('a', {href: 'http://facebook.github.io/react/'}, 'Hello React!')
html:<div id='demo3'></div>
JS:
var Demo3Box=React.createClass({
render:function(){
return(
React.createElement('div',{className:'demo3Box'},
"hello,I.m demo3"
)
)
}
});
ReactDOM.render(
React.createElement(Demo3Box,null),
document.getElementById('demo3')
);
5.引用多个组件的写法:
html:<div id='demo4'></div>
JS:
var Demo4List=React.createClass({
render:function(){
return (
<div className="demo4List">
"hello,I.m demo4List"
</div>
);
}
});
var Demo4Form=React.createClass({
render:function(){
return (
<div className="demo4Form">
"hello,I.m demo4Form"
</div>
);
}
});
var Demo4Box=React.createClass({
render:function(){
return (
<div className="demo4Box">
<h1>demo4Box</h1>
<Demo4List />
<Demo4Form />
</div>
);
}
});
ReactDOM.render(
<Demo4Box />,
document.getElementById('demo4')
);
6.this.props[属性名]得到组件的属性。(用于获取外面传入的参数或者回调方法)
特例:this.props.children:表示组件的所有子节点(!没有子节点时就是undefined,如果有一个子节点,数据类型是Object,多个节点时,数据类型就是array。)
外部data,内部通过props遍历:
var data = [
{id: 1, author: "Pete Hunt", text: "This is one comment"},
{id: 2, author: "Jordan Walke", text: "This is *another* comment"}
];
var Demo5Box=React.createClass({
render:function(){
var commentNodes=this.props.data.map(function(comment) {
return (
<li author={comment.author} key={comment.id}>
{comment.text}
</li>
);
});
return(
<ul className="comment">
{commentNodes}
</ul>
)
}
});
ReactDOM.render(
<Demo5Box data={data} />,
document.getElementById('demo5')
);
使用props.children及React.Children:
7.this.state属性对象,可以改变。(比如用户输入、服务器请求、时间变化等)
getInitialState定义初始变量,这个对象可以通过this.state属性读取。
this.setState方法是修改状态值。
html:<div id='demo6'></div>
JS:
var Demo6Box=React.createClass({
getInitialState:function(){
return {liked:false}
},
handleClick:function(){
this.setState({liked:!this.state.liked});
},
render:function(){
var text=this.state.liked?'like':'haven\'t liked';
return (
<p onClick={this.handleClick}>
You {text} this,click to toggle.
</p>
)
}
});
ReactDOM.render(
<Demo6Box />,
document.getElementById('demo6')
);
8.组件的propTypes属性,用于验证传入的参数是否符合要求。
组件的 getDefaultProps方法,用来设置组件传入参数的默认值。
html:<div id='demo7'></div>
JS:
/*demo7*/
var title='title';
var bool=true;
var count=10;
var arr=[1,2,3];
var obj={'a':1};
var callback=function(){
console.log('dddddd');
};
var content="dsfsdffdd";
var Demo7Box=React.createClass({
propTypes:{
title:React.PropTypes.string.isRequired,
bool:React.PropTypes.bool.isRequired,
count:React.PropTypes.number.isRequired,
arr:React.PropTypes.array.isRequired,
obj:React.PropTypes.object,
callback:React.PropTypes.func.isRequired,
content:React.PropTypes.any.isRequired
},
getDefaultProps:function(){
return{
contentDefault:'sdsfsfdsaafdsfds'
}
},
render:function(){
return (
<div>
<h2>{this.props.title}</h2>
<h2>{this.props.bool}</h2>
<h2>{this.props.count}</h2>
<h2>{this.props.arr}</h2>
<h2>{this.props.obj.a}</h2>
<h2>{this.props.callback()}</h2>
<h2>{this.props.content}</h2>
<h2>{this.props.contentDefault}</h2>
</div>
)
}
});
ReactDOM.render(
<Demo7Box title={title} bool={bool} count={count} arr={arr} obj={obj} callback={callback} content={content} />,
document.getElementById('demo7')
);
9.this.refs:从组件中获取真实DOM的节点。
html:<div id='demo8'></div>
JS:
/*demo8*/
var Demo8Box=React.createClass({
handleClick:function(){
this.refs.myInput.focus();
},
render:function(){
return (
<div>
<input type='text' ref='myInput' />
<input type='button' value='getFocus' onClick={this.handleClick} />
</div>
);
}
});
ReactDOM.render(
<Demo8Box />,
document.getElementById('demo8')
);
10.组件的生命周期的处理函数。
组件的生命周期分成三个状态: Mounting:已插入真实 DOM 、Updating:正在被重新渲染 、Unmounting:已移出真实 DOM。
React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。
componentWillMount()
componentDidMount()
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentWillUnmount()
此外,React 还提供两种特殊状态的处理函数。
componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用。
html:<div id='demo9'></div>
JS:
/*demo9*/
var Demo9Box=React.createClass({
getInitialState:function(){
return {
num:100
}
},
componentDidMount:function(){
var num=this.state.num;
this.timer=setInterval(function(){
if(num<=0){
this.setState({num:100})
}
else{
this.setState({num:num-1})
}
}.bind(this),1000)
},
render:function(){
return (
<div>
{this.state.num}
</div>
)
}
});
ReactDOM.render(
<Demo9Box />,
document.getElementById('demo9')
);
- ReactJS学习笔记(三)
需要注意的问题: 1.组件名称开头字母一定要大写.(PS:原因是 React 的 JSX 里约定分别使用首字母大.小写来区分本地组件的类和 HTML 标签.) 2.this.props.childre ...
- ReactJS学习笔记(二)
1.Ajax: componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI. /*demo1*/ var Demo1Box=Rea ...
- reactjs 学习笔记
1.安装 npm install -g create-react-app create-react-app my-app cd my-app npm start
- 【原】redux异步操作学习笔记
摘要: 发觉在学习react的生态链中,react+react-router+webpack+es6+fetch等等这些都基本搞懂的差不多了,可以应用到实战当中,唯独这个redux还不能,学习redu ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- The Road to learn React书籍学习笔记(第二章)
The Road to learn React书籍学习笔记(第二章) 组件的内部状态 组件的内部状态也称为局部状态,允许保存.修改和删除在组件内部的属性,使用ES6类组件可以在构造函数中初始化组件的状 ...
- React入门基础(学习笔记)
这篇博客是我通过阅读React官方文档的教程总结的学习笔记,翻译可能存在误差,如有疑问请参见http://reactjs.cn/react/docs/tutorial.html . 一.所需文件 在编 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
随机推荐
- OpenGL变换
概述 OpenGL变换矩阵 实例:GL_MODELVIEW矩阵 实例:GL_PROJECTION矩阵 概述 OpenGL管线中,在光栅化操作之前,包括顶点位置与法线向量的几何数据经顶点操作与图元装配操 ...
- Linux-TCP Queue的一些问题
先来回顾下三次握手里面涉及到的问题:1. 当 client 通过 connect 向 server 发出 SYN 包时,client 会维护一个 socket 等待队列,而 server 会维护一个 ...
- Android之Viewpager+Fragment实现懒加载
我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用.而ViewPager默认会缓存三页数据,即:Viewpager每加载一个Fra ...
- break,continue的使用
break,continue 使用break命令允许跳出所有循环下面的例子中,脚本进入死循环直至用户输入数字大于5.要跳出这个循环,返回到shell提示符下,就要使用break命令. #!/bin/b ...
- Python内存数据库/引擎
1 初探 在平时的开发工作中,我们可能会有这样的需求:我们希望有一个内存数据库或者数据引擎,用比较Pythonic的方式进行数据库的操作(比如说插入和查询). 举个具体的例子,分别向数据库db中插入两 ...
- jvm的代码缓存耗尽导致性能下降
在没遇到这个问题之前,我对JVM的解释模式与编译模式的代码性能相差有多大,是没有感觉的,只是觉得编译模式会比解释模式性能好那么一点点吧. 但是经历过这次以后,让我对JVM的即时编译产生了兴趣.先来看看 ...
- Selenium2入门(三)WebDriver API之Get
在上面的例子中,我们看到了WebDriver的一些方法,今天列举WebDriver的Get方法: import java.util.Set; import org.openqa.selenium.We ...
- mybatis实战教程(mybatis in action)之四:实现关联数据的查询
有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等.这些查询是如何处理的呢,这一讲就讲这个问题.我们首先创建一个Article 这个表 ...
- haproxy +keepalived 原创
Haproxy+keepalived 原理: HAProxy介绍及其定位 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.根 ...
- html中空格转义字符
记录一下,空格的转义字符分为如下几种: 平时一般用的是 1. &160#;不断行的空白(1个字符宽度) 2. &8194#;半个空白(1个字符宽度) 3. &8195# ...