1.概述reactjs使用概述
2.介绍reactjs促进了前端模块化,以及数据驱动UI模型的发展。具体的sample可以看代码。
2.1.state与props简单来说,props是每个组件的属性,state是每个组件的状态。换句话说,props是组件对外的接口,state是组件对内的接口。例如,对于一个上传图片组件,图片的链接是他的属性,但上传进度(百分比)是他的状态。
3.原理
3.1.生命周期
//Class创建getDefaultProps=》
//组件创建getInitialState=》componentWillMount=》rendercomponentDidMount=》
//组件数据变化componentWillReceiveProps=》shouldComponentUpdate=》componentWillUpdate=》rendercomponentDidUpdate=》
//组件释放componentWillUnmount
```## 3.2.虚拟dom比较
### 3.2.1.概述reactjs的虚拟dom比较方式其实是很傻逼的,必要时你需要做些许的优化。这种傻逼的比较方式不得不说是对性能的妥协O(n3)=>O(n)
### 3.2.2.节点比较
#### 3.2.2.1.节点类型renderA:
renderB:
=>:
```[removeNode <div/>],[insertNode <span/>]
```renderA:
renderB:
=>:
[removeNode],[insertNode
#### 3.2.2.2.节点属性renderA:
renderB:
=>
[replaceAttribute id “after”]
#### 3.2.2.3.节点样式renderA:
renderB:
=>
[removeStyle color],[addStyle font-weight ‘bold’]
### 3.2.3.列表比较
#### 3.2.3.1.后加
renderA:
renderB:
=>
[insertNode second]
#### 3.2.3.2.前加
renderA:
renderB:
=>
[replaceAttribute textContent ‘second’][insertNode first] ```### 3.2.4.优化 #### 3.2.4.1.key确定 renderA:
<div><span key=”first”>first</span></div>
renderB:
<div><span key=”second”>second</span><span key=”first”>first</span></div>
=>
[insertNode <span>second</span>]
3.2.4.2.本地数据比较
实现shouldComponentUpadte函数,指定reactjs是否需要更新这个虚拟dom,从而避免渲染一棵树。
shouldComponentUpdate: function(nextProps, nextState) { return true;}
很明显,有个很简单的方法来实现这个shouldComponentUpdate的方法,就是通过比较前后的props与state来确定是否需要渲染这颗树。
shouldComponentUpdate: function(nextProps, nextState) { return this.props.value !== nextProps.value;}
这个方法实在太常用,如果每次都要这么写,会很痛苦,还好react给我们提供了pureRenderMixin
var PureRenderMixin = require('react/addons').addons.PureRenderMixin;React.createClass({ mixins: [PureRenderMixin], render: function() { return <div className={this.props.className}>foo</div>; }});
但是,pureRenderMixin对于muttable的数据,容易生成出不合法的结果。
解决方案很简单,永远不要直接修改this.state或this.props。附上,pureRenderMixin的方法
1.2s=>0.12s的差别 # 4.规范 ## 4.1.数据驱动 渲染UI中的component的数据,只能来自于props,state,或者常量,不能来自于其他莫名的地方。对于组件自身来说,外部的变量为props,内部的变量为state。渲染列表数据,必须要加上key。 ## 4.2.数据变动 数据变动时不能直接修改this.state,或者this.props,只能用setState或setProps,除了顶级页面可以用setProps,组件等都不能用setProps。 ## 4.3.数据变化通知 组件由于用户输入造成数据变化时,只需要简单地回调函数onTextChange( data )以通知上级组件数据变动即可。
- 本文作者: fishedee
- 版权声明: 本博客所有文章均采用 CC BY-NC-SA 3.0 CN 许可协议,转载必须注明出处!