React组件和生命周期简介


    React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库。为什么说它是颠覆式的呢?
 

内存维护虚拟 DOM

对于传统的 DOM 维护,我们的步骤可能是:
1.初始化DOM结构
2.从服务器获取新数据
3.使用新数据更新局部DOM
4.绑定各种事件 

首先,我们操作 DOM 是最昂贵的开销,对于需要反复更新 DOM 的网页,无疑是噩梦。而 React 引入了一个全新的概念:虚拟 DOM。虚拟 DOM 是驻留在内存里的一种特殊的对象类型数据,我们可以理解为这是真实 DOM 在内存里的映射。除了结构上的映射外,这个虚拟的 DOM 还包括了渲染真实所需要的数据以及绑定的事件。

最小差异化局部更新真实 DOM

虚拟 DOM 在创建时,首先是使用 JSX 的语法生成一个真实 DOM 树的映射,其次是从服务器端拉取远程数据,接着注入到这个虚拟DOM 树中,同时绑定事件。好了,有了虚拟 DOM、数据、事件,万事俱备。接下来,调用 render() 方法一次性渲染出真实的 DOM,然后全量插入到网页中。虚拟 DOM 静静地躺在内存里,等待数据更新。新数据来临,调用 setState() 方法更新数据到虚拟 DOM 中(此过程会进行差异化对比),然后自动调用 render() 再局部更新渲染出真实的 DOM 。

1.一个虚拟DOM,对应一个真实DOM
2. 一旦数据更新,重新生成虚拟DOM,并对真实DOM进行最小差异化局部更新, 就这么简单。却带来性能上的较大提升。                                 

JSX语法

React采用jsx语法, jsx是 JavaScript 和 HTML 的结合体, JSX 的目标是在 JavaScript 中更加方便的创建 HTML 节点。JSX 经过解释器解释,最终呈现标准的 JavaScript 语法,例如在 React中,下面的 JSX 代码:

return (  
    
Hello, world! I am a CommentBox.
);

将被解释为如下代码:

return (  
    React.createElement(    
    'div',    
    {className: "commentBox"},    
    "Hello, world! I am a CommentBox."  
    )
 );

可以看到,解释器会分析 JSX 的语义并将其转化为创建元素的方法,而并非将 HTML 部分当作简单的字符串原样输出,因此不用担心 JSX会引发 XSS。另一方面,由于 HTML 部分不是被当作字符串处理,JSX 中 HTML 元素的部分写法与标准 HTML 有些许出入。

另外需要注意的是:由于一条 JSX 语句只能够创建一个虚拟 HTML 节点,因此 JSX 语句中至多拥有一个根 HTML 节点。下面的 JSX 就无法完成解释:

return (  
    

Main Title

Sub Title

)

组件

组件是 React 最基本的渲染单位,React 中全是模块化、可组装的组件。组件的嵌套和拼装组成了整个页面。JSX 语法可以让组件的构建更加方便,每个组件拥有自己的属性(props)和状态(state),通过属性赋值和状态修改,React 就可以实现整个页面的呈现和交互。

React.createElement与document.createElement的区别

我们都知道,JavaScript 通过 DOM 实现与 HTML 的交互,然而我们在 React 中构造一个元素却调用了React.createElement方法,表面上看同样是生成一个 DOM 对象,那么为什么不使用document.createElement方法呢?原因就在于React.createElement方法并没有真正生成一个 DOM 对象,而是生成了一个虚拟的 DOM 对象,这也是 React 的核心思想所在。React 中的所有操作都是对虚拟 DOM 而不是对真实 DOM 的操作。所以 React 的状态修改不会实时体现在页面上,而是在整个组件渲染时,React 会比较组件的状态改变,仅将发生改变DOM 进行重绘,虽然看起来这个过程十分复杂,但实践证明这一机制确实能够提高页面渲染效率。这正是 React 高效的秘诀之一。

React组件参数说明 

当通过调用 React.createClass() 来创建组件的时候,你应该提供一个包含render方法的对象,并且也可以包含其它的在这里描述的生命周期方法。

render

 函数原型ReactComponent render(),
render()方法是必须的。当调用的时候,会检测this.props和this.state,返回一个单子级组件。该子级组件可以是虚拟的本地DOM组件(比如 

 或者 React.DOM.div()),也可以是自定义的复合组件。你也可以返回null或者false来表明不需要渲染任何东西。实际上,React渲染一个