React小结

<!DOCTYPE html>
<html>
<head>
<script src="../build/react.js"></script>
<script src="../build/react-dom.js"></script>
<script src="../build/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
// ** Our code goes here! **
</script>
</body>
</html>
a). 注意点最后一个<script>标签的type属性为text/label,这是因为React独有的JSX语法和JS不兼容。凡是使用JSX的地方,都要加上type="text/label";

b). 上面的代码使用了三个库:react.js/react-dom.js/Browser.js,它们都是必须首先加载。其中react.js是React的核心库,react-dom.js是提供与DOM相关的功能,Browser.js的作用是将JSX语法转为javascript语法。(这一步是很耗时间的,在实际上线的时候,应该将它放到服务器完成)
1.ReactDOM.render()
ReactDOM.render是React的最基本的方法,用于将模板转为HTML语言,并插入指定的DOM节点,如:
ReactDOM.render(
<h1>Hello,world</h1>,
document.getElementById('example')
);
//上面代码将一个 h1 标题,插入 example 节点
2.JSX语法
JSX的语法允许HTML语言直接写在JavaScript语言之中,不加任何引号具体点来说:JSX遇到HTML标签(以<开头),就用HTML规则解析;遇到代码块(以{开头),就用JavaScript规则解析
3.组件
React运毒将代码封装成组件(Component),然后想插入普通HTML标签一样,在网页中插入这个组件。React.createClass方法就是用于生成一个组件类,如:
var HelloMessage=React.createClass({
render:function(){
return <h1>Hello {this.props.name}</h1>;
}
});

ReactDOM.render(<HelloMessage name="John" />,
document.getElementById('example')
)
==>组件的属性可以在组件类的this.props对象上获取,
比如name属性就可以通过this.props.name读取补充:this.props.children表示组件的左右子节点;
组件类的PropTypes属性用来验证组件实例的属性是否符合要求
4.获取真实的DOM节点
组件并不是真实的DOM节点,而是存在于内存之中的一种数据结构,叫作虚拟DOM(virtual DOM).只有当它插入文档之后才会变成真实的DOM。更加React的设计,所有的DOM变动都是现在虚拟DOM上发生,然后再将实际发生变动的部分,反应在正式DOM上,
这种算法叫作DOM Diff,它可以极大提高网页的性能表现
如果需要从组件获取真实DOM的节点,要用到ref属性
5.this.state
组件避免不了和用户交互,React将组件看成一个状态机,开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新渲染UI
var LikeButton = React.createClass({
getInitialState: function() {
return {liked: false};
},
handleClick: function(event) {
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>
);
}
});
分析:getInitialState方法用于定义初始状态,它就是一个对象,这个对象可以通过this.state属性读取,当喻户点击组件,导致状态变化。this.setState方法就会修改状态值,每次修改以后,自动调用this.render方法,再次渲染组件
补充:
this.props和this.state都用于描述组件的特性,前者表示那些一旦定义,就不再改变的特性,而后者会随着用户互动而放生变化的特性

6.组件的生命周期
组件的生命周期分为三个状态:
Mounting:已插入真实DOM===>Updating:正在被重新渲染===>Unmounting:已移出真实DOMReact为每个状态都提供了两个处理函数,
will函数再进入状态之间调用,did函数再进入状态之后调用,三种状态攻击五种处理函数:
componentWillMount()
componentDidMount()
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentWillUnmount()React 还提供两种特殊状态的处理函数:componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用,如:
var Hello = React.createClass({
getInitialState: function () {
return {
opacity: 1.0
};
},

componentDidMount: function () {
this.timer = setInterval(function () {
var opacity = this.state.opacity;
opacity -= .05;
if (opacity < 0.1) {
opacity = 1.0;
}
this.setState({
opacity: opacity
});
}.bind(this), 100);
},

render: function () {
return (
<div style={{opacity: this.state.opacity}}>
Hello {this.props.name}
</div>
);
}
});

ReactDOM.render(
<Hello name="world"/>,
document.body
);
注意style={{opacity:this.state.opacity}},因为一重大括号表示JavaScript语法,第二重大括号表示样式对象

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

推荐阅读更多精彩内容

  • 现在最热门的前端框架,毫无疑问是 React 。上周,基于 React 的 React Native 发布,结果一...
    sakura_L阅读 425评论 0 0
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,833评论 1 18
  • 现在最热门的前端框架,毫无疑问是React。在基于React的React Native发布一天之内,就获得了 50...
    Mycro阅读 1,012评论 3 6
  • 每次不知道要写什么的时候,总觉得好无助好空虚好迷茫。会怀疑自己的人生,会怀疑生活的价值,会怀疑忙忙碌碌为了什么。 ...
    玫瑰西海岸阅读 213评论 0 1
  • 6月20日 星期一 圣杯3 三位一体,三种东西结合又影响 读牌1:可以象征合作,友谊,取得成果; 读牌2:可以代表...
    回老家养猫阅读 198评论 0 0