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语法,第二重大括号表示样式对象

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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