最近在公司的项目中开始用 React
,没错就是原生的 React
而不是结合 Redux
等什么的,记录一下在开发过程中遇到的各种问题以及对应的解决方法,希望能对读者有所帮助。
React原则
React
不多做介绍,就是Facebook的一个开源JS框架,专注的层面为View
层,不包括数据访问层或者那种Hash路由(不过React
有插件支持),与Angularjs
,Emberjs
等大而全的框架不同,React
专注的中心是Component
,即组件,React
认为一切页面元 素都可以抽象成组件,比如一个表单,或者表单中的某一项。
常用的技术要点
props
每一个组件都有可变与不可变的属性,props
就是不可变的属性,当props改变时,组件的绘制方法不会被调用。
states
states
就是组件的可变属性,states
的改变会触发组件的render
函数,react
与其他mvvm框架的最大的不同点就是,react
组件可以想象成一个状态机,状态的改变会重绘UI,然后根据 dom diff
算法来绘制UI,而其他的mvvm框架则是对js对象的dirty check(Angularjs)
或者defineProperty
时指定的回调函数(Emberjs
),因此,状态机制与dom diff
的存在声称React
更快。
Refs和findDOMNode()
为了同浏览器交互,我们有时候需要获取到真实的DOM
节点。我们可以通过调用React
的React.findDOMNode(component)
获取到组件中真实的DOM
。
查看官方源码
1 | var MyComponent = React.createClass({ |
componentWillMount
渲染前调用一次,这个时候DOM结构还没有渲染。
componentDidMount
渲染完成后调用一次,这个时候DOM
结构已经渲染了。这个时候就可以初始化其他框架的设置了,如果利用jQuery
绑定事件等等。
componentWillReceiveProps
初始化渲染不会调用,在接收到新的props时,会调用这个方法。
shouldComponentUpdate
初始化渲染不会调用,接收到新的props
或state
时调用。
componentWillUpdate
初始化渲染不会调用,更新前调用。
componentDidUpdate
初始化渲染不会调用,更新后调用。
componentWillUnmount
组件移除前调用。